On Dec 18, 2008, at 4:40 PM, Pål Bergström wrote:
> How do I set variables dynamically based on a search in the
> database? I
> have a list of 30 words in a table called 'words' with a field
> called...words. I would like to loop through them and for each word
> set
> a variable. But I'm not sure how to do that. I've tried this but get
> an
> error:
>
> @thewordlist = Word.find(:all)
> if @thewordlist
> @thewordlist.each do |w|
> "@" + w.word = Publicsurvey.count(:conditions => ["word
> LIKE ?", w.word])
> end
> end
>
> How should I do this?
Yikes! Not like that; what if one of the words is "thewordlist" ;-)
Word.find(:all) will return something that acts like an Array
@word_counts = {}
Word.find(:all).each do |w|
@word_counts[w.word] = Publicsurvey.count(:conditions => ["word
LIKE ?", w.word])
end
Then you can process the @word_counts hash however you like.
It seems like you could push the work off to the database with
something like the following if the words don't have any wildcards in
them that would cause LIKE to give a result different that just =.
sql = <<-END
SELECT words.word, count(publicsurveys.id) as 'count'
FROM words LEFT OUTER JOIN publicsurveys ON publicsurvey.word =
words.word
GROUP BY words.word
END
@word_counts = {}
Word.connection.select_all(sql).each {|rowhash|
@word_counts[rowhash['word']] = rowhash['count']}
-Rob
Rob Biedenharn http://agileconsultingllc.com
[email protected]
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---