Сразу пример: у вас есть контроллер “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