私は、40以上の列に格納された、多くの変数を含む予算を追跡するWebページを持っています。時間が経つにつれて、これらの予算に調整が加えられますが、私は時間と年々の変化を追跡できる必要があります。自分のモデルにプライベートメソッドを追加して、: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/)のような変更を監査するために構築されたライブラリを使用することをお勧めします。例えば、 – engineersmnky