Ruby on Rails,使用destroy方法刪除ActiveRecord對象

歡迎來我的博客http://blog.csdn.net/abbuggy/article/details/8091639

在之前的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中所包含的業務邏輯。

歡迎來我的博客http://blog.csdn.net/abbuggy/article/details/8091639

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章