モデルcounter_cache列の初期化をレール
-
12-09-2019 - |
質問
Iは、テストおよびテストに使用されるオブジェクトグラフのホーンズビーシナリオのRSpecのを使用しています。
0値の代わりに、初期化されていないそれらを残す(ゼロ)にカウンターキャッシュカラムを初期化することをお勧めしますか?または私は、これらのカウンタキャッシュ列を作成し、移行中にデフォルト値を定義する必要がありますか?
解決
はい、あなたはデフォルト値を設定する必要があります。そうでなければ、NULLを処理するために、特殊なケースの数学演算を持っています。
あなたがポストオブジェクトの配列を持っていたあなたはコメントの数を合計取得したいとしましょう。
あなたがいない場合、それは、それがnilで失敗しない可能性がありますされますので、ゼロ@posts.sum(&:comment_count)
に初期化する場合。
私はこのようなあなたの列を定義するお勧めします:
add_column :posts, :comments_count, :integer, :default => 0, :null => false
他のヒント
Railsは単に以下のSQLを送信
UPDATE posts SET comment_count = comment_count + 1, WHERE id IN (10, 15)
だから、どちらかのDBは、未定義の1 == 1またはRailsは、独自のいくつかの初期化を行うことを知っています。 いずれの場合も、これは私には安定した動作のように思えるので、それらをゼロに設定し、作業を保存しないでください。あなたは、とにかく初期化をしたかどうかを確認することができなくなりますので、あなたがそれをテストする方法(それはせずに、単に同じ動作をします)。そして、あなたが本当に将来の校正の面で得たものを、あなたによって初期化されることが保証されていない場合ます。
所属していません StackOverflow