ruby on rails неопределенный метод для массива - PullRequest
5 голосов
/ 31 июля 2009

У меня есть пользователь, которому принадлежит множество телефонов
У меня есть телефон, который имеет много сводок вызовов
поэтому у моего пользователя много сводок вызовов

Теперь к коду, который у меня есть:

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

Но это возвращает эту ошибку:

неопределенный метод call_summaries для #Array: 0x476d2d0

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

5 голосов
/ 31 июля 2009

Если у вас настроены отношения has_many: through, вы должны просто сделать:

@call_summaries = @current_user.call_summaries

Проблема с вашим методом заключается в том, что вы звоните call_summaries на коллекцию @phones, а не на отдельные телефонные экземпляры.

2 голосов
/ 31 июля 2009

@phones - это массив Phone объектов. Вы должны перебрать этот массив и добавить сводки вызовов каждого телефона в один массив. Попробуйте это:

@phones = Phone.find(:all, :conditions => ["user_id = ?", @current_user.id])
@call_summaries = @phones.inject([]){|arr, phone| arr + phone.call_summaries}
1 голос
/ 01 августа 2009

Не по теме и просто я суетливый, но динамический искатель более читабелен:

@phones = Phone.find_all_by_user_id(@current_user)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...