【问题标题】:Rails: How to know which route will be 'called'Rails:如何知道将“调用”哪条路线
【发布时间】:2014-12-08 20:42:27
【问题描述】:

我仍在努力掌握 Rails(对不起那些我尚未接受答案的人。我认为你是对的,但我还没有理解你的答案)。

我认为我的问题是我不知道如何判断用户单击页面元素时将“触发”哪个路由。

我了解路由如何映射到路径,以及路径(取决于 http 动词)如何指向不同的控制器和操作。

我不明白是什么决定了调用哪个 ROUTE。

具体来说,在我的项目中,我试图展示一组测验问题。当用户点击提交按钮时,哪部分代码决定触发哪个路由? (我不是指路径——我知道它映射在 config/routes.db 中——我想知道触发了哪个 ROUTE)。

我知道这似乎是一个普遍的问题,但不理解这一点会直接影响我推进我正在开发的 Rails 项目的能力。

谁能告诉我是什么决定了发送到 Rails 的 ROUTE?是当前页面正在处理的对象类型还是资源?我就是说不出来。我认为有一些基本的东西我没有“得到”,但我不知道那是什么。

我一直在阅读 Hartl 的书和“Rails 入门”指南,但我还没有找到可以为我阐明这一点的解释。

【问题讨论】:

  • 路由从路径到控制器/动作的映射。
  • 一般ActionDispatch::Routing::RouteSet是一个执行调度的机架应用程序,它的文档没有很好,但你仍然可以看看源代码。
  • 我想我问的问题一定不对。我想知道当我单击表单的提交按钮时触发了哪个路由,我如何确定?我正在为表单使用设计,所以它是内部的吗?

标签: ruby-on-rails ruby routes


【解决方案1】:

如果您查看 form_for 助手构建的 <form> 元素,您会发现它具有由 form_for 助手设置的方法和操作属性。

用于创建和编辑对象的方法属性设置为post,并且根据传递给form_for帮助器的对象状态设置操作。

当你传递一个对象的新实例时,例如form_for @post do |f| action 属性的值为/posts。 Rails 路由会看到这一点并知道路由到帖子控制器中的create 方法。

当将现有帖子的对象提供给form_for 助手时,操作属性将具有值/posts/:id。当用户单击提交时,表单将发布到该操作,并且 Rails 路由将知道您发布/更新已经存在的帖子。 Rails 路由并将路由到posts 控制器的update 方法,并将posts id 放入params 哈希中。

【讨论】:

  • 好的,谢谢。目前我正在将 [current_user] 传递给表单,因此当我单击提交时,它会转到用户的个人资料。我需要更熟悉 Rails 只是“了解”东西的想法。我想知道它在做什么,而且我不习惯对象/URLs/helper 似乎突然出现。
【解决方案2】:

Rails 使用请求类型 (GET/POST/PUT/DELETE) 和 url 来确定 routes.rb 中的哪些规则与该特定组合匹配。然后它将请求分派给适当的控制器操作。

要详细了解如何定义您的路线,official guide on routing 是一个很好的起点。

【讨论】:

  • 谢谢。那么它从哪里获取 URL 呢?我使用的是设计表单,所以提交按钮只是 f.submit("Get my results")。它是如何(或在哪里)生成 URL 的?
猜你喜欢
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多