我正在尝试为搜索表单创建范围字符串。我可以用范围构建这样的东西:
scopestring = Product.all
if params[:price].include?
scopestring = scopestring + '.free'
if params[:location].include?
# same for location
end
显然我不能这样做,但有没有办法做类似的事情。有什么建议?不喜欢9条件IF或case语句来处理搜索页面上的各种过滤器。
如果我在这里完全走错了方向,在Rails中处理长条件语句的最佳方法是什么?我宁愿远离宝石。
答案 0 :(得分:2)
首先,Product.all
不是范围,它实际上是搜索范围。你想要的是Product.scoped
。返回的范围是对象,而不是字符串。假设:free
是范围:
products = Product.scoped
if params[:price] == "free" #your example of include? doesn't make sense
products = products.free
end
您可以通过重构到模型中来简化它:
class Product < ActiveRecord::Base
scope :free, lambda {|free| free.nil? ? {} : where(:price => 0)}
end
然后在你的控制器中:
@products = Product.free(params[:price])