Rails двойные вложенные маршруты, разбитые

У меня есть эти маршруты:

  map.resources :categories do |category|
    category.resources :sub_categories
  end

  map.resources :sub_categories do |sub_category|
    sub_category.resources :events
  end

Это сделано только для того, чтобы URL-адрес не должен был быть дважды вложенным, я хочу, чтобы URL-адрес содержал максимум два объекта в глубину.

Проблема заключается в том, что для событий я хочу потребовать /sub_categories/:sub_category_id в качестве префикса_пути, но используя

  map.resources :events, path_prefix => '/sub_categories/:sub_category_id'

дает мне такие маршруты, как

  event_path

Я хочу иметь

  sub_category_event_path

ПОТОМУ ЧТО каждый раз, когда пользователь хочет перейти к *sub_category*, я хочу, чтобы URL-адрес требовал предоставления *category_id*, но если пользователь хочет увидеть событие, должен быть предоставлен sub_category_id.


person Rabbott    schedule 06.02.2011    source источник


Ответы (2)


Вы правы, он генерирует event_path, но для event_path потребуется опция :sub_category_id. Чтобы получить помощника sub_category_event_path, просто напишите его:

class ApplicationController < ActionController::Base
  private
  def sub_category_event_path(sub_category, event) 
    event_path(event, :sub_category_id => sub_category)
  end
  helper_method :sub_category_event_path
end

К сожалению, если вы когда-нибудь захотите sub_category_event_url, вам придется написать и это.

В Rails 3 есть новая поддержка неглубоких маршрутов, которая может вас заинтересовать. Подумайте об обновлении!

person wuputah    schedule 06.02.2011

Мне только что удалось заставить это работать ... но я оставлю это здесь в надежде, что люди проголосуют за пользовательского помощника, как предложил @wuputah, или мой метод.

map.resources :events, :path_prefix => 'sub_categories/:sub_category_id', :name_prefix => 'sub_category_'

создает маршруты, которые я ищу..

person Rabbott    schedule 06.02.2011
comment
между прочим, это меняет свое имя, но не аргументы, которые он принимает. - person wuputah; 06.02.2011