41

ビューカウント(整数)の変数を含むPictureモデルがあります。ビューカウントは、誰かがPictureオブジェクトを表示するたびに+1ずつ増加します。

これを行う上で、の違いは何ですか

   @picture.view_count += 1
   @picture.save

   @picture.increment(:view_count, 1)

また、incrementを使用する場合、.saveは必要ですか?

4

3 に答える 3

51

のソースincrementは以下のとおりです。これは、nilの場合に属性をゼロに初期化し、渡された値(デフォルトは1)を追加しますが、保存は行わないため、.save引き続き必要です。

def increment(attribute, by = 1)
  self[attribute] ||= 0
  self[attribute] += by
  self
end
于 2012-07-16T06:36:50.977 に答える
30

私はよく使用counter_cacheしますincrement_counterが、その場合は。

このような:

Picture.increment_counter(:view_count, @picture.id)

この方法は、自作の方法よりも簡単で高速です。

ちなみに、ActiveRecord::CounterCacheにも。がありdecrement_counterます。

http://api.rubyonrails.org/classes/ActiveRecord/CounterCache/ClassMethods.html

于 2015-04-03T22:26:01.593 に答える
4

counter_cacheを使用する必要があります。counter_cacheは、レコード数を自動的にインクリメントするのに役立ちます。

class Picture < ActiveRecord::Base
  has_many :views
end

class View < ActiveRecord::Base
  belongs_to :picture, counter_cache: true
end

picturesテーブルにはviews_countという名前の列が必要です。または、この列に独自の名前を使用できます。次に例を示します。

belongs_to :picture, counter_cache: :number_of_views

ただし、counter_cache列のデフォルト名であるviews_countを使用することをお勧めします。

于 2012-07-16T07:48:04.307 に答える