Rails Put vs Post
Rails Put vs Post
我一直在阅读有关put和post请求之间的区别,并且我有一些与Rails有关的问题:我想更改已经创建的一行中的一个特定字段...我应该使用put请求还是post请求?例如,以下两者是否不同?
#Assume this is a put request def update @model=Model.find(x) @model.field="new_field" @model.save end #Assume this is a post request def update @model=Model.find(x) @model.field="new_field" @model.save end #What if I use the rails update method? def update @model=Model.find(x) @model.update(model_params) @model.save end
提前感谢。
admin 更改状态以发布 2023年5月22日
Rails默认采用REST规范中的HTTP动词,您不应担心这些方法允许您执行相同的操作的原因。相反,您应该考虑提供一个符合RESTful原则且用户能够理解的API。这些默认行为可以被覆盖。
REST表示:
使用POST方法的请求应该作用于资源集合;向集合中添加新资源。
示例URL:http://example.com/resources
使用PUT HTTP动词的请求应该作用于集合中的单个资源;在服务器上完整替换资源。
示例URL:http://example.com/resource/1
使用PATCH HTTP动词的请求应该作用于集合中的单个资源;在资源所在位置更新某些属性。
示例URL:http://example.com/resource/1
Rails 4现在使用PATCH动词来更新资源,而不是PUT动词。
根据Rails的惯例,
PUT用于更新现有的资源
POST用于创建新的资源
在Rails 4中,PUT已经改为PATCH以避免混淆。
默认情况下,Rails生成的路由如下所示:
posts GET /posts(.:format) {:action=>"index", :controller=>"posts"} POST /posts(.:format) {:action=>"create", :controller=>"posts"} new_post GET /posts/new(.:format) {:action=>"new", :controller=>"posts"} edit_post GET /posts/:id/edit(.:format) {:action=>"edit", :controller=>"posts"} post GET /posts/:id(.:format) {:action=>"show", :controller=>"posts"} PUT /posts/:id(.:format) {:action=>"update", :controller=>"posts"} DELETE /posts/:id(.:format) {:action=>"destroy", :controller=>"posts"}
请注意PUT和POST的操作。