Как получить сводный список полей моделей? - PullRequest
0 голосов
/ 30 сентября 2019

Я использую RoR 5. У меня есть эта модель

class Article < ApplicationRecord
    ...
  has_and_belongs_to_many :contributors, :optional => false

Тогда, скажем, у меня есть массив моделей статей. Как я могу получить полный список участников? Я пробовал это ...

articles.each do |article|
  @contributors << article.contributors
end
@contributors

Но когда я пытаюсь получить доступ к атрибутам участников в представлении, например, "id", я получаю эти ошибки

undefined method `id' for #<Contributor::ActiveRecord_Associations_CollectionProxy:0x00007f828a834028>

Что является правильнымспособ агрегирования списка участников?

1 Ответ

0 голосов
/ 01 октября 2019

Попробуйте:

@contributors = Contributor.joins(:articles).where(articles: {id: articles})

Вы можете проверить Указание условий в объединенных таблицах в документах для получения дополнительной информации.

Этоестественно, предполагается, что

class Contributor < ApplicationRecord
  has_and_belongs_to_many :articles
end

Вы получаете эту ошибку:

undefined method `id' for #<Contributor::ActiveRecord_Associations_CollectionProxy:0x00007f828a834028>

... потому что вы создаете array из ActiveRecord_Associations_CollectionProxy s здесь:

articles.each do |article|
  @contributors << article.contributors
end
@contributors

... с тех пор:

article.contributors

... возвращает ActiveRecord_Associations_CollectionProxy. И, естественно, ActiveRecord_Associations_CollectionProxy, как говорит ошибка, не имеет метода id

...