我有一個網頁跟蹤包含大量變量的預算,存儲在40列以上。隨着時間的推移,對這些預算進行了調整,但我需要能夠跟蹤隨着時間和年復一年的變化。我嘗試在我的模型中添加一個私有方法,該方法應該創建觸發的現有記錄的副本:before_update回調。但是,它不起作用。該更新更改了現有記錄,並且根本不保留原始記錄。Rails - 如何保存現有記錄並將更新應用於副本?
型號:
class Budget < ActiveRecord::Base
before_update :copy_budget
private
def copy_budget
@budget = Budget.find(params[:id])
@budget.dup
@budget.save
end
end
我還在學習軌道,(這是Rails中4),我認爲這將是做到這一點的最好辦法。如果不是,如果記錄已經存在,是否有更好的方式將表單設置爲始終發佈新記錄,而不是路由更新?
目前的form_for線看起來是這樣的:
<%= form_for(@budget) do |f| %>
一切正常,因爲它應該具有的複製沒有發生異常。我錯過了什麼?是否有可能.dup函數也複製:id?這是通過在MySQL數據庫中使用自動增量分配的,所以如果.dup正在複製一切,有沒有辦法將除id之外的所有數據複製到新記錄中?
在此先感謝您的任何建議。
最好的辦法是使用一個爲審計更改而設計的庫,如['audited'](https://github.com/collectiveidea/audited)或['paper_trail'](https://github.com/ airblade/paper_trail),例如 – engineersmnky