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

ShiningRay · 2013年10月15日 · 最后由 doitian 回复于 2013年10月16日 · 3504 次阅读

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

共收到 14 条回复

好问题!查查

要区分一下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 的名字还是保持不变。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册