elk*_*o23 3 ruby activerecord ruby-on-rails ruby-on-rails-3
我有这个观点:
<%= link_to "shirts", things_path (:scope => "shirts" ) %>
Run Code Online (Sandbox Code Playgroud)
这在我的控制器上
@products = Product.send(params[:scope])
Run Code Online (Sandbox Code Playgroud)
但是我想使用链式范围,例如:
<%= link_to "shirts", products_path (:scope => "shirts.blue" ) %>
Run Code Online (Sandbox Code Playgroud)
但由于某些原因,它不起作用.
可能我的语法错了?
如果您将使用方法params作为参数send,请不要忘记通过范围的白名单进行检查:
safe_scopes = %w(shirts pants boots blue red yellow)
Run Code Online (Sandbox Code Playgroud)
然后你就可以选择了fl00r:
@products = Product.scoped
params[:scope].split(".").each{|scope| @products = @products.send(scope) if safe_scopes.include?(scope)}
Run Code Online (Sandbox Code Playgroud)
因为有人会尝试发送?scope=shirts.destroy_all给您的控制器或其他人.
| 归档时间: |
|
| 查看次数: |
2051 次 |
| 最近记录: |