如何在 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 - 如何为同一操作添加第二条路线?