2016-07-22 11 views
0

私はレシピ用のデータベースを持っています。新しいレシピが作成されると、その2つのバージョン(編集不可能な元のバージョン)と編集可能な別のバージョンを作成します。そうすれば、ユーザーは現在のバージョンと元のバージョンを比較できます。レールに作成する際にレコードの2つのバージョンを作成する

が、私はそれらを関連付け、それらを識別するための2つのフィールドを持っている(is_original:ブールとoriginal_id:整数)私は両方にコードを配置する場所を把握カント

は、パラメータを調整し、二回レシピを作成します。私はis_originalがtrueとoriginal_idに設定された最初のものを作成したいと思います。それから私はちょうど作成されたレシピからIDを取得し、一致する次のもののoriginal_idを設定する必要があります。

+0

私はこれがあなたが求めているのではないことを知っていますが、 '監査された'宝石のようなものを使うことを検討しますか?レコードの履歴の変更を追跡するためにこのレコードを使用します。この場合、元の「スナップショット」が最初に作成された「監査」になります。それをそこに投げるだけ。 – Tass

答えて

1

after_createコールバックを使用します。

また、original_idにnullを設定できる場合は、なぜis_originalフィールドに気をつけてください。 is_originalを作るだけですか? nullの場合はtrueを返すoriginal_idフィールドを参照するメソッドです。

+0

私はデータベース構造を作成していたときに遅れてしまったので、それについて考えていなかったので、それを自分の構造で調整します。コールバックメソッドを組み込んで2番目のコールバックメソッドを作成するにはどうすればよいかわかりません – DRing

+0

新しいコールを作成するためにYourClass.newを作成するには、元のコールバックでselfを使用します。小道具を手動で転送するか、クローンを作成する(new_record = old_record.dup) – pixelearth

+0

okだから、属性を変更するためにテストするときに動作するafter_createメソッドがあります...しかし、新しいレコードを作成することはできません。 new_recipe = self.dup new_recipe.original_id = self.id new_recipe.save – DRing

0

最初にオリジナルを作成します。作成後、編集済みの場合は、編集可能なバージョンを作成します。すべての編集で元の子を作成するだけで、基本的なバージョン管理システムが整備されます。

2つのオブジェクトを一度に作成しないでください。2つ目のオブジェクトは、最初のものと重複しています。それはちょうど必要ではないように思われます。

私はブール値の@pixelearthに同意します。 parent_idまたはoriginal_idを使用します。

関連する問題