2014-09-28 38 views
0

我需要能夠做到以下在我的Rails應用程序中演示的一樣。正如你所看到的,在SQL服務器中有一個名爲DELETED的表,用於存儲那些剛被刪除的行。來源:How to create a before delete trigger in SQL Server?像在SQL Server中一樣,Rails中是否有DELETED表?

CREATE TRIGGER TRG_AUD_DEL 
ON yourTable 
FOR DELETE 
AS 
    INSERT INTO my_audit_table (col1, col2, ...) 
    SELECT col1, col2... 
    FROM DELETED 

運用這一邏輯的軌道,是有這樣的表/位置從調用get就像他們在軌道被刪除的行?我知道/ after_destroy之前的回調,但您如何訪問正在銷燬的信息?

回答

1

依賴於特定於數據庫的行爲不是ActiveRecord的重點。它僅使用RDBMS作爲持久存儲的一種形式。像這樣的數據處理被委託給應用程序代碼。

ActiveRecord原則聲明數據庫中的每一行都是應用程序中模型類的實例。因此,模型的一個實例上會調用一個回調函數,很快就會被銷燬。

在模型銷燬之前(before_destroy)應該可以通過該回調中的類字段訪問數據。所以,你應該能夠把這個回調到您的車型之一,你想跟蹤:

def log_to_history 
    DeletedStuff.create(
     title: "Something number #{id}", 
     deleted_at: Time.now, 
     content: self.to_yaml 
    ) 
end 

before_delete :log_to_history 

這是一個有些奇怪的例子,它允許只存儲任何刪除的項目(甚至不同型號的實例)在同一個表中,屬性是用YAML序列化的。但我盡我所能公開數據結構,因此可以輕鬆修改以適應您的需求。

這個例子將需要DeletedStuff模型領域

  • title: string
  • deleted_at:time
  • content:text
+0

有沒有辦法做到這一點,但在軌道臨時表? – Sauron 2014-09-28 15:47:09

+0

@Sauron你是什麼意思「臨時表」?這取決於你想達到什麼。 – 2014-09-28 16:16:44

+0

如何才能得到正在刪除的記錄?我正在尋找獲取正在銷燬的記錄的id,並在before_destroy調用的方法內嘗試了'@deleted_row = self.where(campaign_id:id)',但沒有返回。 – Sauron 2014-09-28 16:32:58

相關問題