【问题标题】:How do I get an aggregated list of models' fields?如何获取模型字段的汇总列表?
【发布时间】:2019-09-30 20:55:12
【问题描述】:

我正在使用 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>

汇总贡献者列表的正确方法是什么?

【问题讨论】:

  • 您确实拥有arrayArticles?或者,您有其他类型的 ActiveRecord enumerable,例如 relation?您是否在您的 Contributor 模型中调用了 has_and_belongs_to_many :articles

标签: ruby-on-rails arrays model relation


【解决方案1】:

试试:

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

您可以在docs 中查看Specifying Conditions on the Joined Tables 了解更多信息。

这自然假设

class Contributor < ApplicationRecord
  has_and_belongs_to_many :articles
end

您收到此错误:

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

...因为您在这里创建了 arrayActiveRecord_Associations_CollectionProxys:

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

...因为:

article.contributors

...返回ActiveRecord_Associations_CollectionProxy。当然,ActiveRecord_Associations_CollectionProxy,正如错误所说,没有方法id

【讨论】:

  • 这有帮助吗?你最后做了什么?
猜你喜欢
  • 2011-03-07
  • 1970-01-01
  • 2019-12-04
  • 2014-10-21
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
相关资源
最近更新 更多