0

をレコードを削除したレコードが削除されるとき、私は(構造前者に類似であろうと)、このような削除されたレコードのために別のテーブルを維持したいです。これを達成するためのRailsは別のテーブルへのRailsで

一つの方法は、明らかに削除されたアイテムのモデルに最初のモデルから構造、検証と関連付けをコピーして貼り付けることであろう。しかし、これは多くのコードの冗長性をもたらし、スケーラブルな解決策ではありません。

くらい(または任意の)なしのRailsでこれを達成する方法のコードの冗長性 または1つは、上記 を述べたよりも、よりスケーラブルであるかもしれない解決策はありますか?

私はRuby 1.9.3-p125とRails 3.2を使用しています。

UPDATE

私は、このテーブルが大きすぎると、削除された記事と厄介したくなかったので、しかし、私はそれに対して決定し、テーブルに追加is_deleted列を使用して検討しました。私はこれらの削除された投稿に実際にアクセスするつもりはありません。これは単に記録保管やアーカイブ目的で保存されています。この列を追加すると、このテーブルへのアクセスが遅くなり、さらに重要なことに、モデルのdefault_scopeにこのチェックを含める場合でも、私は一部のSQL条件でis_deleted == falseのチェックを見逃すことがあります。

+0

これは役に立つかもしれません:http://railspikes.com/2010/2/26/acts-as-archive – Mischa

答えて

0

まあ、基本的にあなたがそれらを捨てる記録を保持していないしたいと思います。したがって、それらを「削除済み」とマークし、それらのレコードを取得している間はそれらのレコードを考慮しないように、コード内のロジックを微調整することができます。

+0

更新を参照してください - ありがとう –

+0

それでは、追加のテーブルを作成してください。これらのレコードに頻繁にアクセスするつもりはないので、安全に保管しても大丈夫だと思います。さらに、ここで冗長性の問題は発生していません。あなたがしなければならないのは、削除が行われるたびに、テーブルAからレコードを削除し、テーブルBに入れることだけです。あなたはこれらの記録を保持したいので、あなたはそれを一方向に保存しなければなりません。団体および検証 - – Humming

+0

冗長性は、モデルです。 –

0

は、元の表の「削除」列を追加します。削除されたレコードを除外するようにモデルのデフォルト範囲を設定します。

+0

更新を参照してください - ありがとう –

1

プライマリテーブルのレコード数が少なく、パフォーマンスが時間によって減少しないように、テーブルを別のテーブルに移動することをお勧めします。このようにして

削除のために使用RailsのActiveRecordのコールバックすなわち

before_destroy :move_to_trash 
. 
. 
def move_to_trash 
    Trash.create!(self) 
end 

レコードが削除されると、そのコピーはゴミ箱テーブルに作成されます。

+0

これは冗長性の問題を解決するものではなく、以下の@Hummingの回答と変わりありません。 –

関連する問題