Передача параметров в пользовательские маршруты RESTful в Rails (используя: collection) - PullRequest
5 голосов
/ 11 апреля 2010

Я пытаюсь добавить собственный маршрут к моим маршрутам RESTful, используя параметр :collection для map.resources, например:

map.resources :products, :collection => { :tagged => :get }

Помеченное действие принимает параметр: tag. Я могу сделать ссылку на маршрут URL, используя: tagged_products_path(:tag => tag.name). Моя проблема с этим заключается в том, что URL, который это генерирует:

/products/tagged?tag=electronic

Я бы хотел, чтобы тег был в URL, а не в теге, например:

/products/tagged/electronic

Конечно, это может быть достигнуто отдельным именованным маршрутом, но мне интересно, если я что-то упустил, и есть способ сделать это с помощью хэша :collection.

Заранее спасибо за помощь

-Damien

Ответы [ 4 ]

4 голосов
/ 12 апреля 2010

Маршруты сбора данных не поддерживают это - вам придется использовать именованный маршрут.

map.tagged_products '/products/tagged/:tag', 
  :controller => 'products', :action => 'tagged', :conditions => { :method => :get }
3 голосов
/ 15 января 2015

Поскольку ответ для Rails 2, я просто хотел добавить версию Rails 4.

get '/products/tagged/:tag' => 'products#tagged', as: :tagged_products

Это будет использоваться как

tagged_products_path('electronic') #=> "/products/tagged/electronic"
1 голос
/ 17 августа 2011

Маршруты сбора не поддерживают это, но есть обходной путь.

"#{tagged_products_path}?#{{:tag => tag.name}.to_query}}"
0 голосов
/ 03 января 2013

Другие ответы более не точны в отношении последней версии Rails. См. Маршруты Rails3 - Передача параметра в маршрут участника

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...