Rails:为什么create/update action 和index action 指向同一个URL?
Rails: Why does create/update action point to the same URL like the index action?
当创建或更新资源时,目标 URL 默认情况下与索引路由相同,对于用户,例如localhost:3000/users
.
不同之处在于,使用 PUT
方法而不是 POST
(据我所知)。
我觉得这不是最理想的。例如,当导航菜单中有一个项目 "Create user" 时,我想在该项目处于活动状态时设置 active
CSS class 。我通过比较 current_page?
和菜单项的 URL(例如 users/new
)来做到这一点。这工作正常,但只有当我没有验证错误时。在这种情况下,URL 现在不再是 users/new
,而是 users
.
Rails 没有针对 POST/PUT 请求分别指向 users/new
(或 users/edit
)是否有充分的理由?使用它们有什么缺点吗?有没有简单的方法可以改变这种行为?
原因是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" 不会不要以相同的方式描述资源。
当创建或更新资源时,目标 URL 默认情况下与索引路由相同,对于用户,例如localhost:3000/users
.
不同之处在于,使用 PUT
方法而不是 POST
(据我所知)。
我觉得这不是最理想的。例如,当导航菜单中有一个项目 "Create user" 时,我想在该项目处于活动状态时设置 active
CSS class 。我通过比较 current_page?
和菜单项的 URL(例如 users/new
)来做到这一点。这工作正常,但只有当我没有验证错误时。在这种情况下,URL 现在不再是 users/new
,而是 users
.
Rails 没有针对 POST/PUT 请求分别指向 users/new
(或 users/edit
)是否有充分的理由?使用它们有什么缺点吗?有没有简单的方法可以改变这种行为?
原因是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" 不会不要以相同的方式描述资源。