是否可以在Ruby on Rails的视图内的模型上应用过滤器?

时间:2018-12-27 09:48:59

标签: ruby-on-rails axlsx

是否可以在视图代码内的模型上应用过滤器:

我使用axlsx生成Excel,并且在myview.xlsx.axlsx文件中尝试了类似的操作:

fs = MyModel.where(:Column1 => v1, :Column2 => v2)
puts fs[0].Column1

我遇到错误

undefined method Column1 for nil:NilClass

我很确定我的过滤器没有问题,所以我想知道在视图中使用这样的过滤器是否合法(以及是否应该只将这些过滤器放置在控制器中)?

2 个答案:

答案 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的原因,您不能在其上调用方法。