カテゴリー:
Rails
タグ:
 Rails update_columns update_counters increment_counters decrement_counters

このエントリーをはてなブックマークに追加
更新日時:
2014年03月23日(日)
作成日時:
2014年03月23日(日)

前の記事 / 次の記事

カラムの更新

ActiveRecord::Persistence

update_column, update_columns

特定の行の特定のカラムを更新する。
直接SQLが発行されバリデーションやコールバックは走らない。
更新日時だけを更新したい場合や、コールバックを走らせたくない場合に便利。

update_column

特定の行の1つのカラム だけ を更新する。
更新したいカラムと、更新後の値の2つの引数を渡す。

obj.update_column, :name, "PS4"

update_columns

特定の行の複数のカラムを更新する。
更新したいカラムと更新後の値をペアにしたハッシュである引数を1つ渡す。

obj.update_columns name: "PS4", price: 39800, description: "あいーん"

カウンターの更新

ActiveRecord::CounterCache::ClassMethods

increment_counter, decrement_counter, update_counters

特定のモデルの特定のIDのオブジェクトのカウンターを更新する。
直接SQLが発行されバリデーションやコールバックは走らない。
カウンターキャッシュを自力で実装する場合に便利。

increment_counter

インクリメントしたいカウンター名と、オブジェクトのIDの2つの引数を渡す。
次の場合はidが5であるModelのcomments_countが1つ増える。

Model.increment_counter :comments_count, 5

decrement_counter

デクリメントしたいカウンター名と、オブジェクトのIDの2つの引数を渡す。
次の場合はidが5であるModelのcomments_countが1つ減る。

Model.increment_counter :comments_count, 5

update_counters

カウンターを更新したいオブジェクトのIDと、
更新したいカウンター名と 1 or -1 のペアであるハッシュの2つの引数を渡す。

1の場合はインクリメントされ-1の場合はデクリメント される。
次の場合はidが5であるModelのcomments_countが1つ増え、favorites_countが1つ減る。

Model.update_counters 5, comments_count: 1, favorites_count: -1

また、idは配列にして複数渡すこともできる。
次の場合はidが2, 4, 6, 8であるModelのcomments_countが1つ増え、favorites_countが1つ減る。

Model.update_counters [2, 4, 6, 8], comments_count: 1, favorites_count: -1