2012-06-18 82 views
0

我有一個模型說帶有計算字段的模型。像下面跨多個實例的相同的活動記錄數據集

class modelA < ActiveRecord::Base 
     attr_accessor : calc_field 

def calc_field 
    @stuff = modelb.all 
    //do fancy things with stuff 
end 

end 

現在我的問題是,如果我有100個記錄modelA。 modelb.all被稱爲100次。但每次都是相同的數據集。但查詢被髮送了100次。

無論如何/我可以在全球範圍內聲明@stuff,因此它可以在modelA的所有實例中共享。所以它只被調用一次。

回答

1

關於如何解決這個問題有很多方法。

解決方案A:

class modelA < ActiveRecord::Base 
    attr_accessor : calc_field 

    def calc_field(modelb_info) 
    @stuff = modelb_info 
    //do fancy things with stuff 
    end 

end 

然後在你的代碼工作流程

model_info = ModelB.all 
model_a_array.collect{|model_a| model_a model_info} 

溶液B

class modelA < ActiveRecord::Base 
    @@stuff ||= ModelB.all 
end 
1

您可以使用類變量。

def calc_field 
    @@stuff ||= modelb.all 
    //do fancy things with stuff 
end 
0

如果你可以修改得到MODELA實例的方式,我會暗示這一點:

modelas = ModelA.includes(:modelbs) 

從此,該數據庫將不再被擊中,當你調用(例如)

modelas.first.calc_field 

我希望幫助