Rails:为什么创建/更新操作指向与索引操作相同的URL?

时间:2017-02-14 18:55:24

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

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

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

我发现这不是最理想的。例如,当具有带有项目的导航菜单时#34;创建用户&#34;在其中,我想在项目处于活动状态时设置active CSS类。我通过将current_page?与菜单项的网址(例如users/new)进行比较来完成此操作。这样可以正常工作,但只有在我没有验证错误时才能正常工作。在这种情况下,网址现在不再是users/new,而是users

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

1 个答案:

答案 0 :(得分:2)

原因是REST

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

假设您拥有用户资源。可以在/users找到用户列表。然后,可以在/users/1找到作为资源的单个对象的单个用户,其中&#34; 1&#34;是有问题的资源的标识符。

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

/users/new是一个允许您这样做的页面的路径,但它并不意味着它应该向/ users / new发出CREATE请求,因为&#34; new&#34;没有以同样的方式描述资源。