我在轨道tutorial上关注路线的整齐红宝石。所以我想知道,路由如何知道这么多?
我有一个名为posts_controller的控制器和一个帖子模型。在routes.rb文件中,我添加了
# config/routes.rb
resources :posts
据我了解,这会自动为与帖子关联的所有控制器操作创建适当的路由。到目前为止,我的posts_controller中只有一个方法:
# app/controllers/posts_controller.rb
def index
end
但奇怪的是,当我执行
时$ rake routes
它给了我所有这些:
posts GET /posts(.:format) posts#index
POST /posts(.:format) posts#create
new_post GET /posts/new(.:format) posts#new
edit_post GET /posts/:id/edit(.:format) posts#edit
post GET /posts/:id(.:format) posts#show
PUT /posts/:id(.:format) posts#update
DELETE /posts/:id(.:format) posts#destroy
路由机制如何知道这么多而没有告诉我我想要创建和更新帖子?
答案 0 :(得分:3)
使用"资源"与您定义的操作无关。它只是创建控制器中可能需要的所有其他路径。
如您所见,它创建:索引,创建,新建,编辑,显示,更新和销毁
它实际上并不是智能的,因为它为不存在的行为创造了路径。
如何将其限制为仅需要的操作的示例。
resources :posts, :only => [:show, :index]
答案 1 :(得分:2)
来自Ruby on Rails guide, Resource Routing: the Rails Default:
资源路由允许您快速声明给定资源控制器的所有常用路由。而不是为索引,显示,新建,编辑,创建,更新和销毁操作声明单独的路由,而是一条资源丰富的路由在一行代码中声明它们。
这是轻松快速定义路线的Rails方式。它不会检查控制器中的方法。
您对其工作原理的理解是正确的。话虽如此,如果您不想要所有路线,只想拥有索引,创建和更新,您可以选择这样做:
resources :posts, :only => [:index, :create, :update]