我有
资源:博客
在我的routes.rb文件中声明,但是当我尝试访问控制器或html.erb文件中的blog_path时,我收到以下错误:
没有路线匹配{:controller =>“blog”,:action =>“show”}缺少必需的键:[:id]
我创建了一个名为BlogController的控制器,并在views目录中使用show.html.erb文件定义了方法show。如果我定义:
匹配'/ blog',以:'blog#show',通过:'get'代替,然后blog_path工作正常。
我的理解是资源:博客只是匹配'/博客'的语法糖,来自:'博客#show',来自:'get'和一堆其他路线。请帮忙。
答案 0 :(得分:8)
blog_path
用于生成博客的路径,因此您需要id
或博客对象,此助手会生成/blogs/12
到blogs#show
之类的路径,以及{{1用于显示对象。 blogs#show
生成blogs_path
到/blogs
(就像所有博客一样)。
查看2 Resource Routing: the Rails Default
blogs#index
您使用了resources :photos
GET /photos index display a list of all photos
GET /photos/new new return an HTML form for creating a new photo
POST /photos create create a new photo
GET /photos/:id show display a specific photo
GET /photos/:id/edit edit return an HTML form for editing a photo
PATCH/PUT /photos/:id update update a specific photo
DELETE /photos/:id destroy delete a specific photo
而没有使用resources :blog
。它会生成
s
答案 1 :(得分:4)
像这样制作资源复数 资源:博客
制作控制器名称blogs_controller.rb及其类名BlogsController
这是rails标准
答案 2 :(得分:0)
我最近开始使用Rails,但我注意到当Rails为我生成一个控制器时,它用名称和字控制器之间的下划线命名。
类似于" blog_controller.rb",几天前我用一个没有下划线替换了一个并得到了类似的错误,而不是为什么。
也许对你有所帮助。
问候!