我认为这是:
<%= link_to "shirts", things_path (:scope => "shirts" ) %>
这在我的控制器上
@products = Product.send(params[:scope])
但是我想使用链式范围,例如:
<%= link_to "shirts", products_path (:scope => "shirts.blue" ) %>
但由于某些原因无效。
可能我的语法错了?
答案 0 :(得分:7)
如果您要使用params
作为send
方法的参数,请不要忘记通过范围的白名单进行检查:
safe_scopes = %w(shirts pants boots blue red yellow)
然后你可以使用fl00r
的zlution:
@products = Product.scoped
params[:scope].split(".").each{|scope| @products = @products.send(scope) if safe_scopes.include?(scope)}
因为有人会尝试将?scope=shirts.destroy_all
发送给您的控制器或其他人。
答案 1 :(得分:3)
试试这个
<%= link_to "shirts", products_path (:scope => "shirts.blue" ) %>
模型
@products = Product.scoped
params[:scope].split(".").each{|scope| @products = @products.send(scope)}