1

我正在关注关于路线的整洁的 ruby​​ on rails教程。所以我想知道,路由怎么知道这么多?

我有一个名为 posts_controller 的控制器和一个 post 模型。在 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

路由机制怎么知道这么多,却从来没有告诉它我想要创建和更新帖子?

4

2 回答 2

3

使用“资源”与您定义的操作无关。它只是在控制器中创建您可能需要的所有宁静路由。

如您所见,它创建:索引、创建、新建、编辑、显示、更新和销毁

它实际上是不智能的,因为它为不存在的操作创建了路线。

如何将其限制为仅您需要的操作的示例。

resources :posts, :only => [:show, :index]
于 2012-09-12T23:45:50.450 回答
2

来自Ruby on Rails 指南,资源路由:Rails 默认值

资源路由允许您快速声明给定资源控制器的所有公共路由。资源丰富的路由不是为您的索引、显示、新建、编辑、创建、更新和销毁操作声明单独的路由,而是在一行代码中声明它们。

这是 Rails 轻松快速地定义路线的方式。它不会检查控制器中的方法。

您对其工作原理的理解是正确的。话虽如此,如果您不想要所有路由,而只想拥有索引、创建和更新,您可以选择这样做:

resources :posts, :only => [:index, :create, :update]
于 2012-09-12T23:45:38.563 回答