该CRUD原则定义持久性数据的四种基本操作:
- 创建,
- 读,
- 更新,
- 删除。
HTTP动词也使用DELETE字。
为什么在Rails的默认路由用的是“ 消灭 ”了对应的HTTP动词DELETE操作?
该CRUD原则定义持久性数据的四种基本操作:
HTTP动词也使用DELETE字。
为什么在Rails的默认路由用的是“ 消灭 ”了对应的HTTP动词DELETE操作?
Rails使用4种标准方法(动词),即:
除了它有7个REST风格的动作:
轨道从来没有使用相同的动词为相应的动作。 路由的行动销毁能够做的多单DELETE,更多的是通过在控制器中相应的动作。
这railsguide可能是你的兴趣: http://guides.rubyonrails.org/routing.html
说明
浏览器通过使用特定的HTTP方法,如GET,POST,PUT和DELETE制造用于URL的请求请求的Rails页面。 每一种方法是对资源执行的操作的请求。 资源路线图的一些在单个控制器相关的请求的行动。
现在,假设我们有一个HTTP GET请求,这意味着你要读/检索数据。 如果动作将具有相同的名称作为动词,GET在这种情况下,这将是过于简单化。 GET可以给访问表明,指数,新的或编辑的操作。 他们都读取数据,但行为本身是绝对不一样的。 同样可以对删除请求说。 此请求是通过所述控制器处理并且可以具有内的动作不同的实现。 这可能是你想要摧毁一个职位,但它也可能意味着你要注销用户会话。 只有那些具有所谓的删除就不能证明有关它的可能性的动作,通过控制器。
编辑
如果您想了解更多关于浏览器的请求是如何被处理,你可以阅读有关M(奥德尔)V的一些信息(IEW)C(ontroller)-model Rails会使用:
http://www.youtube.com/watch?v=3mQjtk2YDkM&noredirect=1
和:
http://betterexplained.com/articles/intermediate-rails-understanding-models-views-and-controllers/
从这个链接的报价:
浏览器发出的请求,如http://mysite.com/video/show/15 web服务器(杂种,使用WEBrick等)接收该请求。 它采用的路线,以找出哪些控制器使用方法:将默认路由模式是在配置/ routes.rb中定义的“/控制器/操作/ ID”。
这意味着您的初始请求将被翻译,并通过Web服务器处理和正确的路线必须通过控制器,其中宁静的动作,如破坏,位于限定。
在Rails的初期,当时只有2动词的,即GET和POST(因为PUT和DELETE不支持,以后版本的Rails加入PUT,并通过隐变量DELETE解决。销毁行动的名称没有改变,因为要求和行动是两码事。
Actions || show || create || update || destroy
SQL || select|| create || update || delete
REST || get || post || post || post
Actions || show || create || update || destroy
SQL || select|| create || update || delete
REST || get || post || put || delete
这句话可能会进一步加息的:
“因为路由器使用HTTP动词和URL匹配入站请求,四个URL映射到七个不同的动作。”
http://guides.rubyonrails.org/routing.html
对于模型的一部分,这里是从很好的总结http://www.nickpeters.net/2007/12/21/delete-vs-destroy/ :
删除方法基本上从数据库中删除的行(或行阵列)。 破坏,另一方面允许更多的选项。 首先,它会检查任何回调,如before_delete,或者说我们在模型中指定的依赖。 接下来,它会保持这种刚刚在内存中删除的对象; 这让我们留下一个消息,说像“订单#{} order.id已被删除。”最后,也是最重要的是,它还会删除与该对象关联的所有子对象!
知道了,它才有意义来调用控制器一样的人在模型中的作用。 删除是过于简单化 。
好问题。
我觉得这是鼓励你总是使用destroy
,而不是delete
你的对象。
事实上, delete
不会触发任何回调。
下面是从瑞安贝茨的很早(2007)答案
基本上,“删除”直接发送查询到数据库中删除的记录。 在这种情况下,Rails不知道是什么属性是它也不会delete一个记录,如果有任何回调(如before_destroy)。
在“消灭”方法需要传入ID,使用“查找”方法从数据库中获取的模型,然后调用破坏上。 这意味着回调被触发。
您可能需要使用“删除”,如果你不想被触发的回调或者你想更好的性能做。 否则(大部分时间),你会想用“消灭”。
资源