创建或更新资源时,默认情况下,目标URL与索引路径相同,例如对于用户而言localhost:3000/users
。
不同之处在于,使用POST
方法而不是PUT
,据我所知(<据我所知)。
我发现这不是最理想的。例如,当具有带有项目的导航菜单时#34;创建用户&#34;在其中,我想在项目处于活动状态时设置active
CSS类。我通过将current_page?
与菜单项的网址(例如users/new
)进行比较来完成此操作。这样可以正常工作,但只有在我没有验证错误时才能正常工作。在这种情况下,网址现在不再是users/new
,而是users
。
为什么Rails没有为POST / PUT请求分别指向users/new
(或users/edit
)有充分的理由吗?使用它们有什么缺点吗?有没有简单的方法来改变这种行为?
答案 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;没有以同样的方式描述资源。