【问题标题】:Rails 3 association eager load vs opposite associationRails 3 关联急切负载与相反关联
【发布时间】:2012-12-16 21:31:49
【问题描述】:

我有这样的关联模型:

class Batch
  has_many :logs

class Log
  belongs_to :batch

我正在使用包含来加载带有日志的批次:

b = Batch.includes(:logs)

按预期运行 2 个选择(批次和日志)。

那我做

b.first.logs.first.batch

这会触发对批次的另一个选择,即使它们实际上已经加载。 我想通过执行 include(:logs => :batch) 来“修复”它,但我仍然认为这里有问题,因为相同的批次被加载了两次。什么给了?

【问题讨论】:

    标签: ruby-on-rails-3 associations eager-loading


    【解决方案1】:

    您可以使用 :inverse_of 设置来解决这个问题,它让 ActiveRecord 知道这两个关联是彼此相反的。

    class Batch
      has_many :logs, :inverse_of => :batch
    end
    
    class Log
      belongs_to :batch, :inverse_of => :logs
    end
    

    【讨论】:

    • 谢谢,以前从未注意到这一点!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多