ruby和rails中的资源路径

uwopmtnx  于 2022-11-04  发布在  Ruby
关注(0)|答案(3)|浏览(120)

我已经

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'和一堆其他路由的语法糖。请帮助。

yvfmudvl

yvfmudvl1#

blog_path用于生成指向blog的路径,因此您需要id或blog对象,此帮助器生成/blogs/12blogs#show的路径,blogs#show用于显示对象。blogs_path生成/blogsblogs#index(与所有blog类似)。
请看2 Resource Routing: the Rails Default

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。它会产生

blog_index GET    /blog(.:format)                                          blog#index
                       POST   /blog(.:format)                                          blog#create
              new_blog GET    /blog/new(.:format)                                      blog#new
             edit_blog GET    /blog/:id/edit(.:format)                                 blog#edit
                  blog GET    /blog/:id(.:format)                                      blog#show
                       PUT    /blog/:id(.:format)                                      blog#update
                       DELETE /blog/:id(.:format)                                      blog#destroy
fiei3ece

fiei3ece2#

使资源成为复数,例如:博客
并将控制器命名为blogs_controller.rb,将其类名命名为BlogsController
这是Rails标准配置

e4yzc0pl

e4yzc0pl3#

我最近开始使用Rails,但是我注意到当Rails为我生成一个控制器时,它在名称和单词controller之间用下划线命名。
blog_controller.rb这样的东西。几天前我用没有下划线的其他替换了一个,得到了类似的错误,不知道为什么。

相关问题