Ruby on rails undefined метод для массива

110
12

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

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

поэтому у моего пользователя много списков вызовов


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


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 метод `call_summaries 'для #Array: 0x476d2d0



Любая помощь будет очень оценена.

спросил(а) 2021-01-19T14:15:14+03:00 6 месяцев, 2 недели назад
1
Решение
111

Если у вас есть has_many: через установление отношений, вы должны просто иметь возможность:


@call_summaries = @current_user.call_summaries

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

ответил(а) 2021-01-19T14:15:14+03:00 6 месяцев, 2 недели назад
78

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

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

ответил(а) 2021-01-19T14:15:14+03:00 6 месяцев, 2 недели назад
64

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


@phones = Phone.find_all_by_user_id(@current_user)

ответил(а) 2021-01-19T14:15:14+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема