【问题标题】:ActiveRecord: eagerly load, but only load idsActiveRecord:急切加载,但只加载 id
【发布时间】:2013-03-20 18:37:37
【问题描述】:

假设我有这些模型:

class Order < ActiveRecord::Base
  has_many :lines
end

class Line < ActiveRecord::Base
  belongs_to :order
end

我想在一个请求中加载一些订单记录及其#line_ids。不过,我宁愿不将所有 Line 记录实例化为 ActiveRecord 对象。另外,我宁愿不覆盖 ActiveRecord 提供的#line_ids 方法。

这可能吗?

【问题讨论】:

    标签: sql ruby-on-rails activerecord


    【解决方案1】:

    选择单个列与选择行应该不会产生太大的性能差异,除非您在 Line 模型上有许多属性,这反过来可能是重构的提示。

    如果你只想要 id,我可能会在我的 Order 模型中做这样的事情

    def line_ids_array
      Line.where(order_id: self.id).pluck(:id)
    end
    

    这应该返回特定订单的行 ID 数组。

    【讨论】:

    • 这会覆盖 ActiveRecord 提供的 #line_ids 方法,我不想这样做。
    • 在这种情况下,您可以将其命名为其他名称。我不确定你到底想要什么。结构?一个id的数组? ActiveRecord 实例的 id 属性全部为零?
    • 感谢您的帮助。 AR 为每个has_many 关联提供#{association}_ids。如果您急切加载关联,例如调用#line_ids,将不会再次访问数据库。
    • 另外,我修改了我的问题,使其更接近我真正想要的:一次加载多个订单及其关联行的 id。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2010-12-01
    • 2017-08-28
    相关资源
    最近更新 更多