Rails 4.1.7
我有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
第二次加载以查找值并使用已加载记录中的数据?
答案 0 :(得分:0)
好的,我找到了解决方案。
# Report
has_many :settlements, -> {select("settlements.*, computed_values.distance AS distance")},
through: :computed_values
之后,Report.first.settlements.first.distance
完美无缺!