如何在 ruby​​ on rails 中更改路线?

Posted

技术标签:

【中文标题】如何在 ruby​​ on rails 中更改路线?【英文标题】:How to change routes in 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 模式匹配的配置。

【问题讨论】:

【参考方案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/…

以上是关于如何在 ruby​​ on rails 中更改路线?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails 6 - 如何根据特定路线建模/隐藏视图?

Ruby on Rails - 如何为同一操作添加第二条路线?

ruby on rails中收集路线和会员路线的区别?

ruby on rails 路线

如何使用链接/按钮更改列属性 - Ruby on Rails

如何从 0 开始学 Ruby on Rails