Rails Rails 将 action 名设计为 destroy 而请求却是 delete ?

ShiningRay · October 15, 2013 · Last by doitian replied at October 16, 2013 · 4344 hits

新同学在这上面搞混了,我也不知道如何解释 rails 为什么这么设计

好问题!查查

要区分一下 HTTP 协议里的方法和 control 里的方法 前者常用到的:get、post、put、delete、head 等等 后者与前者的对应关系,在 guides 里有详细说明: http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions

Rails uses 4 standard methods(verbs), namely:

  • GET
  • POST
  • PUT
  • DELETE

Besides it has 7 RESTful actions:

  • index
  • new
  • create
  • edit
  • update
  • show
  • destroy

Rails never uses the same verb as the corresponding action. Routing to the action destroy makes it possible to do more than a single DELETE, through the corresponding action in the controller.

http://stackoverflow.com/questions/14730451/why-the-ruby-on-rails-action-destroy-is-not-named-delete

问题,是不是应该修改为:为什么以 delete 方式发起请求,但对应的 action 却为 destroy .

因为 http 标准里面没有 destroy 的类型,只有 delete

这问题可以扩展为 为何 POST 对应的 action 是 create PUT 对应的 action 是 update DELETE 对应的 action 是 destroy?

DELETE 是一个抽象,Destroy 只是 DELETE 的一种形式...

#6 楼 @iBachue 是不是因为 CRUD 的惯例名称是:create read update destory

Destroy 只是一种 action 名称,Delete 是 HTTP 协议中请求方式的名称。两者是两码事!!

或许我没理解好问题!!

或许是作为面向对象方式考虑,创建对象是 create,而不是 insert,同理,销毁对象 destroy,而不是删除 delete

那为什么 post 请求对应 create 呢?为什么 ruby on rails 不叫 rails on ruby 呢?这种问题太多了

我能说这是约定吗?

@huacnlee 发的 SO 的回答,好像是在 HTTP verb DELETE 出现之前,Rails 就已经有 destroy action 了,虽然后来支持了新的 DELETE verb,但是 action 的名字还是保持不变。

You need to Sign in before reply, if you don't have an account, please Sign up first.