【问题标题】:How to load parent-child-parent associations in Rails 4?如何在 Rails 4 中加载父子父关联?
【发布时间】:2014-04-29 15:01:11
【问题描述】:

这是我在 StackOverflow 上的第一个问题 :)

我正在构建一个 Rails 4 应用程序,无法找到从多个数据模型加载记录的好方法。我可以像内部连接一样对 SQL 语句进行硬编码,但想知道是否有更好的方法。搜索了关于 SO 的现有问题,但没有找到匹配项。

这是我的模型:

class Person < ActiveRecord::Base
  has_many :addresses
end

class Address < ActiveRecord::Base
  belongs_to :person
  belongs_to :city
end

class City < ActiveRecord::Base
  has_many :addresses
end

问题:给定一个人 ID,我应该如何加载它的关联地址和城市信息?

【问题讨论】:

    标签: activerecord ruby-on-rails-4 eager-loading


    【解决方案1】:
    Address.includes(:persons,:cities).where(person_id: person.id)
    

    这是众多方法之一。

    【讨论】:

    • 谢谢巴巴尔。如果我只想选择列的子集怎么办?我尝试使用以下代码,但始终返回 nil。 class Address &lt; ActiveRecord::Basebelongs_to :personbelongs_to :citybelongs_to :city_select_columns, -&gt; { select("column_name"), :class_name =&gt; "City"end然后查询:Address.includes(:person,:city_select_columns).where(person_id: person.id)
    • 再次加入会更好,但因为我们已经在使用包含?然后就是这样:
      Address.includes(:persons,:cities).select(cities.column1,cities.column2, persons.column1, persons.column2.....).where(person_id: person.id )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多