3

テストには rspec を使用し、テストで使用されるオブジェクト グラフには hornsby シナリオを使用しています。

カウンタ キャッシュ列を初期化しない (nil) ままにするのではなく、値を 0 に初期化することをお勧めしますか? または、これらのカウンター キャッシュ列を作成する移行で既定値を定義する必要がありますか?

4

2 に答える 2

8

はい、デフォルト値を設定する必要があります。それ以外の場合は、NULL を処理する特殊なケースの数学演算が必要です。

投稿オブジェクトの配列があり、コメント数の合計を取得したいとしましょう。

ゼロ@posts.sum(&:comment_count)に初期化する場合はそうしますが、そうしないと、nil で失敗するため、そうではない可能性があります。

次のように列を定義することをお勧めします。

add_column :posts, :comments_count, :integer, :default => 0, :null => false

于 2009-11-24T18:52:01.547 に答える
1

Rails は単純に次の SQL を送信します。

UPDATE posts SET comment_count = comment_count + 1, WHERE id IN (10, 15)

したがって、DB が undefined +1 == 1 であることを認識するか、Rails が独自の初期化を行います。どちらの場合でも、これは安定した動作のように思えるので、ゼロに設定して作業を保存しないでください。とにかく初期化を行ったかどうかを確認することはできないため (そうしなくても同じように動作します)、どのようにテストしますか。そして、それがあなたによって初期化されることが保証されていない場合、将来の保証に関して本当に得たものは何ですか.

于 2009-09-21T08:14:31.330 に答える