是否可以在视图代码内的模型上应用过滤器:
我使用axlsx生成Excel,并且在myview.xlsx.axlsx
文件中尝试了类似的操作:
fs = MyModel.where(:Column1 => v1, :Column2 => v2)
puts fs[0].Column1
我遇到错误
undefined method Column1 for nil:NilClass
我很确定我的过滤器没有问题,所以我想知道在视图中使用这样的过滤器是否合法(以及是否应该只将这些过滤器放置在控制器中)?
答案 0 :(得分:3)
您可以在视图中包含这样的代码,尽管您应尽量避免在视图中包含逻辑,然后将其移至控制器或帮助器中。这里的问题是活动记录关系为空:
fs = MyModel.where(:Column1 => v1, :Column2 => v2) #=> #<ActiveRecord::Relation []>
fs[0] #=> nil
您可以使用try
来避免在关系为空的情况下引发异常,并返回nil
:
fs[0].try(:Column1) #=> nil
答案 1 :(得分:0)
这是合法的,但不建议在视图中使用查询。最好将它们移动到控制器,甚至最好将它们包装在模型内部的方法中。
在您的情况下,查询看起来返回一个空集合,这就是fs[0]
是nil
的原因,您不能在其上调用方法。