我有一个名为modela的模型,带有一个计算字段。如下所示
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实例中共享它。所以它只被调用一次。
答案 0 :(得分:1)
您可以使用类变量。
def calc_field
@@stuff ||= modelb.all
//do fancy things with stuff
end
答案 1 :(得分: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
答案 2 :(得分:0)
如果您可以修改获取ModelA实例的方式,我建议:
modelas = ModelA.includes(:modelbs)
从那时起,当您致电(例如)
时,数据库将不再被点击modelas.first.calc_field
我希望有帮助