- 内容
-
カラムの更新
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