2011-02-06 11 views
0

У меня есть эти маршруты: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 как path_prefix, но с использованием

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

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

event_path 

Что я хочу иметь, это

sub_category_event_path 

ПОСКОЛЬКУ каждый раз, когда пользователь хочет, чтобы добраться до * sub_category *, я хочу, чтобы URL требовать * CATEGORY_ID * быть предоставлены, но если пользователь хочет увидеть событие, должен быть предусмотрен sub_category_id.

ответ

0

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

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

производит маршруты я ищу ..

+0

FWIW, который меняет свое название, но не аргументы она принимает. – wuputah

+0

Он делает ... – Rabbott

1

Вы правы, он генерирует 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 есть новая поддержка для мелких маршрутов, которые могут вас заинтересовать. Подумайте о модернизации!

Смежные вопросы