【问题标题】:Rails: Why does create/update action point to the same URL like the index action?Rails:为什么创建/更新操作与索引操作一样指向同一个 URL?
【发布时间】:2017-07-03 05:03:41
【问题描述】:

创建或更新资源时,默认情况下目标 URL 与索引路由相同,对于用户,例如localhost:3000/users.

不同之处在于使用PUT方法而不是POST(据我所知)。

我觉得这不是最理想的。例如,当导航菜单中包含“创建用户”项时,我想在该项处于活动状态时设置active CSS 类。我通过比较 current_page? 和菜单项的 URL(例如 users/new)来做到这一点。这工作正常,但只有当我没有验证错误时。在这种情况下,URL 现在不再是users/new,而是users

Rails 没有针对 POST/PUT 请求分别指向 users/new(或 users/edit)是否有充分的理由?使用它们有什么缺点吗?有没有简单的方法来改变这种行为?

【问题讨论】:

  • 嗯,根据经验,我可以告诉你,用这个来对抗框架并不是一个好主意。
  • 是的,我也更喜欢为新/创建和编辑/更新对回发到相同的 URL。做到这一点并不难(见下面的答案),但你最终可能会做很多工作来保持 url 和表单助手正常运行。与其把时间花在创建更有弹性的 CSS 上,不如说是更好。我建议避免使用特定于页面或 url 的样式。根据我的经验,它们是不可维护的。

标签: ruby-on-rails post routing put restful-architecture


【解决方案1】:

原因是REST

简而言之,Rails 将所有内容都视为一种资源,并且为此遵循了一些约定。在典型的 CRUD 应用程序中,您有创建 (POST)、读取 (GET)、更新 (PUT/PATCH) 和销毁 (DELETE) 操作,它们是用于对资源进行操作的动词。

假设您有一个用户资源。可以在/users 找到用户列表。然后,可以在 /users/1 找到作为资源的单个对象的单个用户,其中“1”是相关资源的标识符。

现在,根据您可用的 CRUD 动词,如果您想编辑用户,考虑到我们讨论的 CRUD 动词,哪个 ACTION 最有意义? PUT /users/1 是正确答案;您正在更新(CRUD 中的 U)特定资源。如果您想删除该用户?删除/users/1 是有道理的。如果你想创建一个? CREATE /users 是合乎逻辑的选择,因为您不是作用于特定对象,而是作用于整个资源,类似于 GET /users 不是作用于单个对象,而是作用于集合。

/users/new 是一个可以让你这样做的页面的路径,但这并不意味着它应该向 /users/new 发出 CREATE 请求,因为“new”不会以同样的方式描述资源.

【讨论】:

  • 谢谢。我知道理论上是这样写的。从务实的角度来看,我更希望他们以另一种方式决定
猜你喜欢
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 2014-07-20
  • 2012-04-01
  • 1970-01-01
  • 2012-03-15
相关资源
最近更新 更多