是否可以在 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
是否可以在视图代码中的模型上应用过滤器:
我使用 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