我已经
resources :blog
在我的routes.rb
文件中声明,但当我尝试访问控制器或html.erb
文件中的blog_path
时,我得到以下错误:
No route matches {:controller=>"blog", :action=>"show"} missing required keys: [:id]
我已经创建了一个名为BlogController
的控制器,并在views目录下用一个show.html.erb
文件定义了方法show
。match '/blog', to: 'blog#show', via: 'get'
,则blog_path
工作正常。
我的理解是资源:blog
只是match '/blog', to: 'blog#show', via: 'get'
和一堆其他路由的语法糖。请帮助。
3条答案
按热度按时间yvfmudvl1#
blog_path
用于生成指向blog的路径,因此您需要id
或blog对象,此帮助器生成/blogs/12
到blogs#show
的路径,blogs#show
用于显示对象。blogs_path
生成/blogs
到blogs#index
(与所有blog类似)。请看2 Resource Routing: the Rails Default
您使用了
resources :blog
,但没有使用s
。它会产生fiei3ece2#
使资源成为复数,例如:博客
并将控制器命名为blogs_controller.rb,将其类名命名为BlogsController
这是Rails标准配置
e4yzc0pl3#
我最近开始使用Rails,但是我注意到当Rails为我生成一个控制器时,它在名称和单词controller之间用下划线命名。
像
blog_controller.rb
这样的东西。几天前我用没有下划线的其他替换了一个,得到了类似的错误,不知道为什么。