• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

RubyonRails,使用destroy方法删除ActiveRecord对象

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在之前的《Ruby on Rails,使用new和create创建ActiveRecord对象及他们之间的区别》中学习到,通过new和create命令创建及持久化ActiveRecord对象;《Ruby on Rails,使用save和update_attributes更新持久化的ActiveRecord对象》中,我们知道通过save和update命令更新一个已经持久化过的ActiveRecord对象。

在这里,我们看看如何将已经持久化过的对象从数据库中删除。

启动rails console,先创建一个持久化对象,它的id属性是“1”。

irb(main):033:0* subject.name="abbuggy"
=> "abbuggy"
irb(main):034:0> subject.save
=> true
irb(main):035:0> subject.id
=> 1

下面准备将其删除,先从数据库中用find方法找到这个对象并赋值给一个变量。然后调用destory方法,将这个对象所包含的信息从数据库中删除。

irb(main):045:0> subject_to_delete=Subject.find(1)
irb(main):061:0> subject_to_destory.destroy
  [1m[36m (0.0ms)[0m  [1mBEGIN[0m
  [1m[35mSQL (1.0ms)[0m  DELETE FROM `subjects` WHERE `subjects`.`id` = 1
  [1m[36m (26.0ms)[0m  [1mCOMMIT[0m
=> #<Subject id: 1, created_at: "2012-10-19 15:05:27", updated_at: "2012-10-19 15:05:27", name: nil, position: nil>

在这个对象被destory之后,即使在数据库中没有了,我们依然能够通过变量名访问它。但是通过调用frozen?方法查看,得知在这个时候,对象的属性是无法修改的。即,destory方法调用之后会将对象置为冻结状态。

irb(main):064:0> subject_to_delete.frozen?
=> true

我们删除这个对象的时候为什么没有使用更常见的delete而是用了destory方法呢?其实delete方法也能将对象从数据库中删除,只是delete绕过了一些Active Record的回调(callback)和验证函数;而使用destory则不会,通常我们使用destory方法来确保我们的数据库是一致的,并且不会破坏Model中所包含的业务逻辑。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap