【问题标题】:How to change routes in ruby on rails?如何在 ruby​​ on rails 中更改路线?
【发布时间】:2011-12-01 22:14:45
【问题描述】:

我刚刚安装了 Ruby on Rails 并创建了一个名为 posts 的脚手架。 RoR 为我生成了控制器和其他所需文件。

我在posts_controller 中创建了一个新方法,但我无法访问它。我查看了控制器中的其他方法,看起来我需要通过/posts/[MY POST ID]/[MY METHOD NAME] 访问它们。

假设我在控制器中创建了自定义方法hello,我该如何访问它?

我查看了routes.rb,但没有配置。

更新:

我知道我可以在routes.rb 中手动配置它,但是所有其他方法如何工作?例如,我在“posts_controller.rb”控制器中有“edit”和“update”方法。这两种方法在不配置路由的情况下如何工作?

  # GET /posts/1/edit
  def edit
    @post = Post.find(params[:id])
  end

我找不到与/posts/[0-9]/edit 模式匹配的配置。

【问题讨论】:

    标签: ruby-on-rails routes scaffold


    【解决方案1】:

    在 Rails 3.x 中

    match 'posts/hello' => 'posts#hello'

    可在 example.com/posts/hello 获得

    【讨论】:

      【解决方案2】:

      这将使您在路线上取得良好的开端:http://guides.rubyonrails.org/routing.html

      并非您创建的每个方法都有自己的路径,rails 是基于 rest 原则构建的,并且您的脚手架在 post 控制器中创建了遵循这些路径的方法,例如 index、show 等......

      你可以强制你的方法添加一个路由,但实际上你很少需要这样做,因为遵循约定要容易得多。

      【讨论】:

        【解决方案3】:

        您要查找的文档是Rails Routing From the Outside In。阅读本文后,您将了解 Rails 为接受您的请求并将其指向控制器中的方法所做的一切。

        【讨论】:

          【解决方案4】:

          您需要为其添加路由到routes.rb。例如:

          # Previous routes
          # resources :posts
          
          # Updated routes
          resources :posts do
            get "hello", :on => :member
          end
          

          看看这个Rails guide about routing,它应该可以帮助你理解 Rails 路由。

          【讨论】:

            【解决方案5】:

            当您使用脚手架生成帖子时,它会在您的routes.rb 文件中添加一行resources :posts。该行为生成的所有控制器操作配置路由。正如 Caleb 上面提到的,并非每个动作都有专门的路径。单个路径可以对应多个操作,因为 rails 还考虑了 HTTP 方法。因此,例如,使用 HTTP 方法 GET 的路径 /posts 对应于控制器操作 index,而使用 HTTP 方法 PUT 的相同路径对应于控制器操作 update。当您从控制台运行 rake routes 时,您可以看到这些关联。我同意 Jordan 和 Caleb 的观点,即 Rails Guides 是一本不错的读物,可以帮助您了解路线。

            【讨论】:

            • // 谢谢你的回答! ROR如何通过阅读一行代码(资源:posts)来配置路由?
            • 我没有查看源代码来了解 Rails 是如何做到的,但是当你使用“资源”时,Rails 设置了 7 条路线。查看上述指南的第 2.2 节:guides.rubyonrails.org/routing.html
            • 我从来没有找到比这个更好的关于路由基础的解释:youtube.com/…
            猜你喜欢
            • 2012-07-21
            • 2015-12-20
            • 2011-02-15
            • 2011-10-26
            • 1970-01-01
            • 2014-06-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多