Именованные маршруты не разрешаются в контроллере - PullRequest
0 голосов
/ 27 августа 2009

Я настроил ресурс в routes.rb:

map.resource :papers

, что отражается на выходе rake routes:

 new_papers GET    /papers/new(.:format)                     {:controller=>"papers", :action=>"new"}
edit_papers GET    /papers/edit(.:format)                    {:controller=>"papers", :action=>"edit"}
     papers GET    /papers(.:format)                         {:controller=>"papers", :action=>"show"}
            PUT    /papers(.:format)                         {:controller=>"papers", :action=>"update"}
            DELETE /papers(.:format)                         {:controller=>"papers", :action=>"destroy"}
            POST   /papers(.:format)                         {:controller=>"papers", :action=>"create"}

Проблема возникает, когда я пытаюсь перенаправить на именованный маршрут внутри действия контроллера. Это отрывок из действия create для ресурса «Бумага». При успешном сохранении он должен перенаправить пользователя на действие show контроллера paper.

if @paper.save
  redirect_to @paper
else
  render :action => 'new'
end

Возникает исключение: undefined method 'paper_url', предполагающее, что контроллер не может видеть названный маршрут. Однако эти вспомогательные методы будут работать в представлениях.

Насколько я могу судить, это то же самое, что скаффолд Rails устанавливает ресурс, поэтому я не могу найти, что не так. Что мне здесь не хватает?

Ответы [ 2 ]

2 голосов
/ 27 августа 2009

Это должен быть map.resource s : документы

Я мог получить только ошибку, скопировав свой маршрут, поэтому решил, что это опечатка.

1 голос
/ 27 августа 2009

Вы ошиблись

Эшафот для бумажной модели будет выглядеть так:

   papers GET    /papers(.:format)                  {:controller=>"papers", :action=>"index"}
           POST   /papers(.:format)                  {:controller=>"papers", :action=>"create"}
 new_paper GET    /papers/new(.:format)              {:controller=>"papers", :action=>"new"}
edit_paper GET    /papers/:id/edit(.:format)         {:controller=>"papers", :action=>"edit"}
     paper GET    /papers/:id(.:format)              {:controller=>"papers", :action=>"show"}
           PUT    /papers/:id(.:format)              {:controller=>"papers", :action=>"update"}
           DELETE /papers/:id(.:format)              {:controller=>"papers", :action=>"destroy"}

обратите особое внимание на метод show:

paper GET    /papers/:id(.:format)

вместо твоего:

 papers GET    /papers(.:format)    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...