【问题标题】:How does routing know so much?路由怎么知道这么多?
【发布时间】:2012-09-06 00:34:28
【问题描述】:

我正在关注关于路线的整洁红宝石tutorial。所以我想知道,路由怎么知道这么多?

我有一个名为 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

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

【问题讨论】:

    标签: ruby-on-rails routing


    【解决方案1】:

    来自Ruby on Rails guide, Resource Routing: the Rails Default

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

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

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

    resources :posts, :only => [:index, :create, :update]
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      resources :posts, :only => [:show, :index]
      

      【讨论】:

      • 啊,这说明了一些事情。那么使用它是不明智的吗?你会用什么代替?
      • 我并不是要暗示你不应该使用它,只是它会创建默认情况下你可能不需要的路由。我更新了我的代码,以展示如何限制所需的操作。
      猜你喜欢
      • 2019-06-14
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多