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

Is it possible to apply filters on a model inside a view in Ruby on Rails?

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

我使用 axlsx 生成 Excel 我在我的 myview.xlsx.axlsx 文件中尝试了类似的东西:

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

我收到一个错误

undefined method Column1 for nil:NilClass

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

在视图中使用查询是合法的,但不建议使用。最好将它们移动到控制器中,甚至更好地将它们包装在模型中的方法中。

在你的例子中,查询 returns 看起来是一个空集合,这就是为什么 fs[0]nil 并且你不能对其调用方法。

您可以在视图中包含此类代码,但您应尽量避免在视图中包含逻辑并将其移至控制器或助手。这里的问题是活动记录关系是空的:

fs = MyModel.where(:Column1 => v1, :Column2 => v2) #=> #<ActiveRecord::Relation []>
fs[0] #=> nil

您可以使用 try 来避免在关系为空时引发异常,而 return nil 改为:

fs[0].try(:Column1) #=> nil