0

これが私のコントローラーのコードです:

  @post.increment!(:views_count) # => false, record not saved, views_count is 0
  @post.errors                   # => is empty
  @post.save!                    # => true, views_count magically incremented to 1

問題は、#saveがないことです。実際には機能しません。レコードは更新されず、views_countは0です。何かアイデアはありますか?

4

3 に答える 3

0

メソッドの使用方法に問題はないと思います。

increment!レコードを保存できなかった場合、 は false を返します。

あなたが試すことができる1つの可能なことは、views_count属性を0に初期化することだと思います。現在nil、整数値の代わりになっている可能性があります。また、値では、演算子nilを実行できません。+=

属性の値を初期化するには、db/migrate フォルダーの下にある属性の移行ファイルを見つけます。

属性コードを次のように変更します。

t.integer :views_count, default: 0

または、テーブルの作成とは別に列を個別に追加した場合...

add_column :appropriate_model, :views_count, :integer, default: 0
于 2012-07-21T21:48:37.130 に答える
0

increment!を呼び出すことupdate_attributeに注意してくださいsave(:validate => false)。これは検証をスキップしますが、コールバック チェーンは引き続き実行されます

before_* コールバックのいずれかが false を返す場合、アクションはキャンセルされ、保存は false を返します。

before_*モデルにコールバックが定義されていて、false を返す可能性がありますが、何も設定されていませんかerrors?

于 2012-07-21T22:16:02.660 に答える
0

レコードをリロードしてみましたか? キャッシュされたバージョンのファイルを見ているに違いありません。試す:

@post.increment!(:views_count)
@post.reload
于 2012-07-21T21:34:47.420 に答える