прохождение прикованных цепей в качестве параметров на рельсах 3? - PullRequest
3 голосов
/ 28 марта 2011

У меня есть это на мой взгляд:

<%= link_to "shirts", things_path (:scope => "shirts" ) %>

это на моем контроллере

@products = Product.send(params[:scope])

однако я хотел бы использовать цепочки, такие как:

<%= link_to "shirts", products_path (:scope => "shirts.blue" )  %>

но по какой-то причине это не работает.

Возможно, мой синтаксис неправильный?

Ответы [ 2 ]

7 голосов
/ 28 марта 2011

Если вы собираетесь использовать params в качестве аргумента для метода send, не забудьте проверить его по белому списку областей действия:

safe_scopes = %w(shirts pants boots blue red yellow)

и тогда вы можете пойти с fl00r sultiontion:

@products = Product.scoped
params[:scope].split(".").each{|scope| @products = @products.send(scope) if safe_scopes.include?(scope)}

потому что кто-то попытается отправить ?scope=shirts.destroy_all вашему контроллеру или чему-то еще.

3 голосов
/ 28 марта 2011

Попробуйте это

<%= link_to "shirts", products_path (:scope => "shirts.blue" ) %>

Модель

@products = Product.scoped
params[:scope].split(".").each{|scope| @products = @products.send(scope)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...