2017-10-05 8 views
0

私は自分のモデルの1つに対応するオブジェクトのリストを取るエンドポイントを持っています。私はこのコレクションをモデルのテーブル全体として扱い、Postへの呼び出しごとにそれを素早くドロップアンドポストし直したいと思います。リスト内の各要素に対してModel.delete_allを実行し、次にModel.createを行う以外の方法がありますか?重要な場合は、ActiveRecordでMySQLとAttendantアダプタを使用しています。Rails ActiveRecordのコレクションを完全に上書きする

+0

同じテーブルで削除された同じデータを再移植? – s1mpl3

+0

新しいデータセット、古いデータセットを上書きします。 –

+0

コレクションレコードを更新するだけです。 –

答えて

1

このような振る舞いのユースケースはわからないので、私はあなたのアルゴリズムの決定について提案するつもりはありません(最初の一見では、および再移植)。とにかく、あなたが計画していると仮定し、あなたが本当にドロップして再投入することを決めた場合は、delete_all、次にcreateがこのトリックを行う必要があります。

することはできcreate同時に複数のオブジェクト(またはあなたが少し速くプロセスを作るために一括インポートのための宝石を見ることができます。[1]あなたが心に留めておく必要があります

一つのことをしていますトランザクション内でコード全体を保つため、再投入が失敗した場合には、あなたはすべてのデータを失うことはありません:

ModelName.transaction do 
    ModelName.delete_all 
    ModelName.import [:col1, :col2], new_records 
end 

[1] https://github.com/zdennis/activerecord-import

関連する問題