我有一个quality_code
字段,该字段是用户输入的自由文本。但是,某些已知的代码具有更长的描述。如果已知代码存储在记录中,我想显示描述代替代码。
我在模型上有一个简单的方法来显示描述(如果可用),或输入的quality_code(如果没有),但它属于绘制n个项目列表所需的n + 1个查询的典型模式:
def view_quality_code
if (code = QualityCode.find_by_quality_code(quality_code)).nil?
quality_code
else
code.description
end
end
如果模型实际上是链接的(belongs_to :quality_code
),那么我会通过向查询添加includes(:quality_code)
来对此进行排序,因此它只会对quality_code表执行一次额外的查询。
在没有链接模型的情况下,是否有一种简单的方法可以做同样的事情?
答案 0 :(得分:1)
不知道你的其他型号叫什么,我会假装它是“小工具”。假设你有一组像这样的小部件:
widgets = Widget.all
你可以像这样伪装自己的热心:
@codes = QualityCode.where(:quality_code => widgets.map(&:quality_code).uniq).group_by(&:quality_code)
def view_quality_code
if codes = @codes[quality_code]
codes[0].description
else
quality_code
end
end