2015-01-21 61 views
1

的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查找值和使用已经加载的记录中的数据?

回答

0

好的,我找到了一个解决方案。

# Report 
has_many :settlements, -> {select("settlements.*, computed_values.distance AS distance")}, 
      through: :computed_values 

之后,Report.first.settlements.first.distance工作完美!