2015-01-21 57 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工作完美!