2012-03-12 6 views
0

テーブルフィールド型整数を+1で簡単に更新するためのルビー/レールトリックはありますか?Rails、簡単に+1でテーブルフィールド整数を更新する方法

私はInvite.clicks

ユーザがコントローラを打つ、私はデータにInvite.click + 1を作りたいです。どんなトリックですか、それとも手動で更新する必要がありますか?

ありがとうございました

答えて

4

これはActiveRecordモデルですか?

Invite.first.increment!(:click) 
+0

'increment'メソッドはレコードを保存しません。 @muが提案した 'update_counters'を使用します。 –

+0

それが私がインクリメントを提案した理由です! bashで – christianblais

+0

私は最後に '!'を見逃しました。 'increment! '呼び出しは' after_save'呼び出しを呼び出しますが、並行処理は安全ではありません。 –

3

あなたは右のデータベース内の値を更新する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のすべての処理を行う必要はありません。

関連する問題