テーブルフィールド型整数を+1で簡単に更新するためのルビー/レールトリックはありますか?Rails、簡単に+1でテーブルフィールド整数を更新する方法
私はInvite.clicks
ユーザがコントローラを打つ、私はデータにInvite.click + 1を作りたいです。どんなトリックですか、それとも手動で更新する必要がありますか?
ありがとうございました
テーブルフィールド型整数を+1で簡単に更新するためのルビー/レールトリックはありますか?Rails、簡単に+1でテーブルフィールド整数を更新する方法
私はInvite.clicks
ユーザがコントローラを打つ、私はデータにInvite.click + 1を作りたいです。どんなトリックですか、それとも手動で更新する必要がありますか?
ありがとうございました
これはActiveRecordモデルですか?
Invite.first.increment!(:click)
あなたは右のデータベース内の値を更新するupdate_counters
を使用することができます:
Invite.update_counters(invite_id, :clicks => 1)
このような直接的なSQLの呼び出しに変換します。
update invites
set clicks = coalesce(clicks, 0) + 1
where id = #{invite_id}
そうならば、
increment
方法があります
データベース内で更新を行う利点は、同時に2つの更新を心配する必要がないことです。また、カウンタをインクリメントしているだけでは、オブジェクト全体をデータベースから取り出す必要はなく、通常のActiveRecordのすべての処理を行う必要はありません。
'increment'メソッドはレコードを保存しません。 @muが提案した 'update_counters'を使用します。 –
それが私がインクリメントを提案した理由です! bashで – christianblais
私は最後に '!'を見逃しました。 'increment! '呼び出しは' after_save'呼び出しを呼び出しますが、並行処理は安全ではありません。 –