Rails: Переопределение collection и member путей
Сразу пример: у вас есть контроллер “channels” и вы хотите использовать стандартные методы channels_path и channel_path, которым соответствуют действия index и show. По умолчанию, адреса для них будут /channels и /channels/:id, но вы хотите изменить стандартные адреса на /channels/:flag, (где :flag, например active или archive). Для show вы не хотите использовать :id, а а что-то вроде /channels/:category/:slug. Для переопределения пути к index достаточно сделать обычно описание через get с параметром :as, равному пустой строке и :on => :colleciton:
resources :channels do
get '(/:flag)', :defaults => {:flag => 'all'}, :as => '', :on => :collection
end
Немного сложнее переопределить путь к show, т.к. если просто написать
resources :channels do
get ':category/:slug', :as => '', :on => :member
end
вы получите путь :id/:category/:slug. Для определения нового формата используйте resource вместо resources с параметром :path:
resource :channel, :path => ':category/:slug'
Теперь у вас будут правильные методы channels_path and channel_path`.
Эту же проблему можно решить с помощью метода mathch в рутах, но в таком случае нужно будет использовать match для всех вложенных действий и контроллеров.
comments powered by HyperComments