2011-03-22 155 views
1

想知道是否有一種簡單的方法通過更新數據庫字段來安靜地刪除條目,而不是從數據庫中刪除條目?Rails:按數據庫字段刪除(刪除= 1)而不是從數據庫中刪除?

具體來說,只要能運行RESTful「delete」函數,我想觸發「deleted = 1」而不是「drop from database」。

讚賞任何想法...

+0

像一個布爾屬性標記的屬性,所以它存在? – s84 2011-03-22 00:43:13

+0

是的,確切地說。 :-) – PlankTon 2011-03-22 00:46:22

回答

2

當您可以控制模型中的所有內容時,沒有理由在控制器中執行一堆工作。將deleted_at列添加到模型中,重寫destroy()方法,然後將default_scope設置爲where(:deleted_at => nil)。

當然,只有當你不想使用acts_as_paranoid(github,rubygems)時,才能做到這一切。

class User < ActiveRecord::Base 
    acts_as_paranoid 
end 
0

我不是專家,但我可能會在控制器上創建一個destroy方法和實現所需bevahior那裏。

0

我這樣做是爲了我不想銷燬的東西。許多應用程序都爲用戶執行此操作,因此它們不會破壞信息,但會真正禁用該帳戶。

  1. rails g migration add_deleted_boolean_to_model
  2. 添加代碼在第2部分到遷移
  3. db:migrate
  4. 廣告的代碼在第3部分到控制器

第2部分 - 在遷移文件:

add_column :modle_name, :deleted, :boolean, :default => false 

然後rake db:migrate

3部分 - 在你的控制器:

def destroy 
    @object = Model.find(params[:id) 
    @object.update_attribute(:deleted, true) 
end 

def index 
    @objects = Object.find(:all, :conditions => ['deleted=?', false]) 
end 

def show 
    @object = Model.find(params[:id) 
    @object = nil if @object.deleted 
    flash[:notice] = "Sorry that was deleted; contact admin if you want it resated" 
end 

記住查找條件不Rails3中,也許有人會編輯。