2011-07-01 3 views
-1

私は5つのテーブルがあり、それらの間に関連しています。みんな良い、完璧!しかし、質問表のフィールドis_answered = 0の場合よりもスクリプトを作成しようとしましたので、質問表のrespondent_idで回答者を見つけて、それらの文字を送信してください しかし、 私は誤解しています!activerecordの問題が見つかりました

私はこのコードを持っている:

inquiry  = Inquiry.find(:all, :conditions => ["is_answered = 0"]) 
question  = inquiry.question 
respondents = Respondent.find(:all, :conditions => ["id = (?)", question.user_id]) 

respondents.each do |r| 
    Notifier.deliver_user_notification(inquiry) 
end 

と私はruby blah.rbを入力して、私はこのエラーを取得:

undefined method `question' for #<Array:0x7f646c82b568> 

は何私のミス?

PS - Inquiry表dの関係表questionsanswersの間にあります。 Inquiryに関連するPSS - Respondent table

+0

'問い合わせ= Inquiry.find(:すべて、[が。 ..]) 'はあなたに問い合わせのコレクション(配列として)を提供します。配列上で 'inquiry.question'を呼び出すことはできません。コンソールでコードを試してみてください。 – Wukerplank

答えて

4

問題があるため、次のように配列が返されます。

Inquiry.find(:all, :conditions => ["is_answered = 0"]) 

行うことができる最適化おそらくあるとして、次のことを試してみてください、それはありませんどのように多くのSQLクエリに留意する:

inquiry  = Inquiry.find(:all, :conditions => ["is_answered = 0"]) 
inquiry.each do |i| 
    question  = i.question 
    respondents = Respondent.find(:all, :conditions => ["id = (?)", question.user_id]) 

    respondents.each do |r| 
     Notifier.deliver_user_notification(inquiry) 
    end 
end 
関連する問題