命名路由未在控制器中解析

时间:2009-08-26 20:38:08

标签: ruby-on-rails

我在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"}

当我尝试重定向到控制器操作中的命名路由时,会出现问题。这是Paper资源的create操作的摘录。它应该在成功保存时将用户重定向到show控制器的paper操作。

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

出现的异常是:undefined method 'paper_url',表明控制器无法看到指定的路由。但是,这些辅助方法将在视图中工作。

据我所知,这与Rails脚手架设置资源的方式相同,所以我找不到什么是错的。我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

应该是map.resource s :论文

我只能得到错误,我复制了我的路线,所以我认为它必须是一个错字。

答案 1 :(得分:1)

你犯了一个错误

纸模型的脚手架将如下所示:

   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)