2009-07-31 8 views
5

のための未定義のメソッドは、私が持っている多くの携帯電話を所有しているユーザー
私は多くのコールの要約を持つAAの携帯電話を持っている
ので、私のユーザー持っている多くのコール要約私が持っているコードに今 ルビー配列

class User < ActiveRecord::Base 
    has_many :phones 
    has_many :call_summaries, :through => :phones 
end 

class Phone < ActiveRecord::Base 
    belongs_to :user 
    has_many :call_summaries 
end 

class CallSummary < ActiveRecord::Base 
    belongs_to :phones 
end 

特定のユーザーに属する電話機のすべてのコールサマリーを表示するレポートを生成したいとします。私は、コントローラに入り、これが私のコードです:

def index 
    @phones = Phone.find(:all, :conditions => ["user_id = ?", @current_user.id]) 
    @call_summaries = @phones.call_summaries.find(:all) 
end 

しかし、これは、このエラーが返されます。

undefined method `call_summaries' for #Array:0x476d2d0

すべてのヘルプは非常に高く評価されるだろう。

答えて

5

あなたはhas_manyの持っている場合は、次の設定関係を通じて、あなただけ行うことができるはず:

@call_summaries = @current_user.call_summaries 

をあなたの方法の問題は、あなたが上call_summariesを呼んでいるということです個々の電話機のインスタンスではなく、@ phonesのコレクションになります。

+0

ああこれは、おかげで働きました。ただもう一つ、カラム名が異なるのでcall_summariesに外部キーを設定しました。私はphones.id列も探していません。生成された16進数のキーを探しています。これは、外部キーで正しいコマンドから生成されたSQLです。 SELECT call_summaries * call_summariesから内はphones.user_id = 1 それはphones.hex_keyあるべきcall_summaries.reported_by = phones.id ONの携帯電話を登録しようphones.idの代わりに。どのように私はそれを変更する、私は外のキーを試みたが、私は何かばかげていない限り、それは動作しませんでした。 もう一度おねがいします! – Ryan

+0

アソシエーションの両端で:foreign_keyと:primary_keyオプションを使用する必要があるようです。たとえば、CallSummaryでは、「belongs_to:phone、:foreign_key =>:reported_by、:primary_key =>:hex_key'を試してください(電話でhas_many関連についても同じことをしてください)。 –

2

@phonesは、Phoneオブジェクトの配列です。その配列を繰り返し処理し、各電話の呼び出し要約を単一の配列に追加する必要があります。これを試してみてください:

@phones = Phone.find(:all, :conditions => ["user_id = ?", @current_user.id]) 
@call_summaries = @phones.inject([]){|arr, phone| arr + phone.call_summaries} 
1

トピックオフとちょうど私がうるさいことが、ダイナミックファインダーをより読みです:

@phones = Phone.find_all_by_user_id(@current_user) 
+0

は '@phones = Phone.find_all_by_user_id(@ current_user.id)'にする必要があります。 – brittohalloran

関連する問題