Вложенные ресурсы без имен контроллеров в URL - PullRequest
1 голос
/ 07 июля 2010

У меня очень простое приложение на Rails 3 с моделью User, разработанной Devise, и моделью Notes.Сейчас URL и маршрутизация выглядят так:

# url
/users/MEMBERNAME/notes/TITLE-OF-NOTE

# routing
resources :users do
  resources :notes
end

Но я бы хотел, чтобы URL выглядели так, как будет выглядеть маршрутизация в этом случае?

# url
/MEMBERNAME/TITLE-OF-NOTE

Обновление:

Спасибо, но теперь я обнаружил новую проблему.В моих формах у меня есть этот код:

<%= form_for([@user, @note]) do |f| %> 

и в моем контроллере я перенаправляю так:

format.html { redirect_to([@user, @note], :notice => 'Note was successfully created.') } 

В обоих случаях, когда я использую @user, @note старые URLвсе еще присутствуют.Знаете ли вы, как перевести форму и перенаправления для использования структуры член / заголовок?

Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 04 апреля 2011

Вы можете отслеживать поведение маршрутов, с которым вы работаете, с помощью рабочих помощников маршрутов в Rails 3, например:

resources :users, :path => ''
resources :users, :path => '', :only => [] do
  resources :notes, :path => '', :except => [:index]
end

См. Мой пост в блоге , где подробно описано, как я прибылв этом решении.

5 голосов
/ 07 июля 2010

Вы можете использовать собственный маршрут здесь:

get "/:user_id/:id", :to => "notes#show", :as => :short_user_note

Надеюсь, это поможет!

Обновление:

Чтобы использовать только что созданный именованный маршрут:

# => /USER_NAME/NOTE_NAME
redirect_to short_user_note_path(@user, @note)

# => /user/USER_NAME/note/NOTE_NAME
redirect_to user_note_path(@user, @note)
# OR
redirect_to url_for([@user, @note])
# OR
redirect_to [@user, @note]

Итак, общее правило: если вы передаете массив объектов active_record, как показано ниже, в методы #redirect_to, #url_for или #form_for, метод #polymorphic_url вызывается внутри и генерирует стандартный маршрут RESTful.

...