访问数据的has_many:通过,防止额外的数据加载
问题描述:
的Rails 4.1.7访问数据的has_many:通过,防止额外的数据加载
我有3种型号。
# Report
class Report < ActiveRecord::Base
has_many :computed_values, dependent: :destroy
has_many :settlements, through: :computed_values
end
# ComputedValue
class ComputedValue < ActiveRecord::Base
belongs_to :report
belongs_to :settlement
end
# Settlement
class Settlement < ActiveRecord::Base
has_many :computed_values
has_many :reports, through: :computed_values
end
ComputedValue
有一个属性distance
。
我想这样的建筑工程:Report.first.settlements.first.distance
这是ComputedValue.find(report_id: Report.first.id, settlement_id: Report.first.settlements.first.id).distance
有没有得到那个工作的任何优雅的和快速的方法是什么?
当我打电话给Report.first.settlements.first
时,Rails已经从加入表computed_values
加载了第一次报告,第一次结算和记录的记录。 如何防止第二次加载从computed_values
查找值和使用已经加载的记录中的数据?
答
好的,我找到了一个解决方案。
# Report
has_many :settlements, -> {select("settlements.*, computed_values.distance AS distance")},
through: :computed_values
之后,Report.first.settlements.first.distance
工作完美!