Вложенный ресурс Rails - маршрут не создается - PullRequest
0 голосов
/ 12 февраля 2012

Я сделал вложенный ресурс в рельсах:

resources :courses do
  resource :members
end

и получите следующие маршруты:

course_members      POST     /courses/:course_id/members(.:format)            {:controller=>"members", :action=>"create"}
new_course_members  GET      /courses/:course_id/members/new(.:format)        {:controller=>"members", :action=>"new"} 
edit_course_members GET      /courses/:course_id/members/edit(.:format)       {:controller=>"members", :action=>"edit"}
                    GET      /courses/:course_id/members(.:format)            {:controller=>"members", :action=>"show"}
                    PUT      /courses/:course_id/members(.:format)            {:controller=>"members", :action=>"update"}
                    DELETE   /courses/:course_id/members(.:format)            {:controller=>"members", :action=>"destroy"}

Почему не создан маршрут для действия => шоу было создано?

Thx

Ответы [ 2 ]

0 голосов
/ 12 февраля 2012

Маршрут действительно создан. Я думаю, что вы принимаете помощников за фактический маршрут.

GET      /courses/:course_id/members(.:format) {:controller=>"members", :action=>"show"}

Я думаю, что ваше замешательство связано с тем, что у вас есть три помощника (course_members, new_course_members & edit_course_members), и у вас нет "show_course_members".

Rails создает только одного помощника для действий SHOW, UPDATE, DESTROY и CREATE, потому что вы можете отличить друг друга от вызванного метода HTTP.

АКЦИЯ | HTTP-метод

ПОКАЗАТЬ - ПОЛУЧИТЬ

ОБНОВЛЕНИЕ - PUT

CREATE - POST

УНИЧТОЖЕНИЕ - УДАЛЕНИЕ

Если вы вызываете course_members_path с помощью метода GET, Rails вызовет действие show.

Еще одна вещь, которую я заметил, однако: вы создаете ресурс только для одного участника (отсюда ресурс в singuler на router.rb). Один курс действительно имеет только один член? Слово resource (в единственном числе) на routs.rb следует использовать, если у вас есть отношение has_one на контроллере. Если у вас есть has_many , вам следует вместо этого использовать resources (множественное число).

Посмотрите на http://guides.rubyonrails.org/routing.html#singular-resources

С уважением

0 голосов
/ 12 февраля 2012

Есть ли что-то еще в вашем файле маршрута, который может конфликтовать?Кроме того, как вы просматриваете маршруты?Когда я добавляю то, что у вас есть выше, в мой файл маршрута, я получаю следующее:

course_members     GET    /courses/:course_id/members(.:format)          {:action=>"index", :controller=>"members"}
                   POST   /courses/:course_id/members(.:format)          {:action=>"create", :controller=>"members"}
new_course_member  GET    /courses/:course_id/members/new(.:format)      {:action=>"new", :controller=>"members"}
edit_course_member GET    /courses/:course_id/members/:id/edit(.:format) {:action=>"edit", :controller=>"members"}
course_member      GET    /courses/:course_id/members/:id(.:format)      {:action=>"show", :controller=>"members"}
                   PUT    /courses/:course_id/members/:id(.:format)      {:action=>"update", :controller=>"members"}
                   DELETE /courses/:course_id/members/:id(.:format)      {:action=>"destroy", :controller=>"members"}
courses            GET    /courses(.:format)                             {:action=>"index", :controller=>"courses"}
                   POST   /courses(.:format)                             {:action=>"create", :controller=>"courses"}
new_course         GET    /courses/new(.:format)                         {:action=>"new", :controller=>"courses"}
edit_course        GET    /courses/:id/edit(.:format)                    {:action=>"edit", :controller=>"courses"}
course             GET    /courses/:id(.:format)                         {:action=>"show", :controller=>"courses"}
                   PUT    /courses/:id(.:format)                         {:action=>"update", :controller=>"courses"}
                   DELETE /courses/:id(.:format)                         {:action=>"destroy", :controller=>"courses"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...