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
-~----------~----~----~----~------~----~------~--~---

Reply via email to