私は、JSONフィールドを持つ製品テーブルを持っているので、そのメソッドを更新する必要があります。だから、二つのアプローチレール内でupdate_all内の自己オブジェクトを呼び出す
Product.all.each do |pr|
pr.update_column(:boolean_tree, pr.change_boolean_tree)
end
がある離れパフォーマンスからこのは何も問題はありません。パフォーマンスを向上させるために、raw SQLを実行できます。それは間違いなくうまくいくが、レールの方法ではない。
このような状況では、update_allを使用することが考えられました。何か案が ?
SQLからルビメソッド( 'change_boolean_tree')を呼び出す方法はありません。大規模なSQLクエリの値を事前計算することはできますが、これは大量の 'INSERT INTO'に対しては簡単ですが、' UPDATE'には巨大な 'CASE'文が必要です。私は1回限りのスクリプトでない限り、後者に対して助言したいと思います。これをさらに複雑にするのは、列がJSONデータであるという事実です。 JSONデータの生のSQLに相当する 'change_boolean_tree'を書くことができるなら、それは実行可能です。私が見ているように、それらはあなたのデータ構築に与えられた2つのオプションです。 –
@AndrewSchwartzはい私はこのアプローチを知っています。それをする方法があれば考えていた。 –
あなたのご意見が分かりません。あなたはこれらの2つのアプローチのうちの1つを試しましたか?結果は何でしたか?ステートメント自身は概念的に構築するのが非常に簡単で、標準的なRailsの保護や利便性を提供していないので、何かを壊すのは簡単になります。 –