Rails4.1のCount(数値増減)操作系メソッドまとめ

Rails4.1で用意されているcountを操作するメソッドについてまとめた。 以下の形で用意されている。

  • increment
  • increment!
  • decrement
  • decrement!

概要

modelをinstance化した後使用する。
基本的にattributeと差分を指定する。差分のデフォルト値は1。
incrementだと差分増加、decrementだと差分減少。
!付きだとsaveする。!無しだとsaveしない。

1
2
3
4
5
6
7
8
9
10
11
12
13
u = User.first
u.likes_count                # => 1 (初期値)

u.increment :likes_count, 3
u.likes_count                # => 4
u.decrement :likes_count, 3
u.likes_count                # => 1

u.increment! :likes_count, 3
User.first.likes_count       # => 4

u.decrement! :likes_count, 3
User.first.likes_count       # => 1

*(おまけ)counter_cache操作系まとめ

実は上記のincrement!とdecrement!はcounter_cacheのattributeに対しては使用できない。

1
2
3
4
5
6
7
8
9
10
class User < ActiveRecord::Base
  has_many :likes
end

class Like < ActiveRecord::Base
  belongs_to :user, counter_cache: true
end

User.first.increment! :likes_count
# => ActiveRecord::ActiveRecordError: likes_count is marked as readonly

理由はhttp://stackoverflow.com/questions/4295404/problem-with-counter-cache-implementation

counter_cacheを手動で更新するときは下記メソッドを使用する。

  • increment_counter
  • decremnet_coutner
  • update_counters
  • reset_counters

Comments