モデルにposts_count
列を追加しました。Tag
create_table "tags", :force => true do |t|
t.string "name"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "posts_count", :default => 0, :null => false
end
今、私はこの質問に基づいてそれらのカウンター キャッシュを構築しようとしています (多対多の関連付けのカウンター キャッシュの作成): 多対多の関連付けを持つモデルのカウンター キャッシュ
post.rb:
private
after_create :increment_tag_counter_cache
after_destroy :decrement_tag_counter_cache
def increment_tag_counter_cache
Tag.increment_counter(:posts_count, self.taggings.tag.id)
end
def decrement_tag_counter_cache
Tag.decrement_counter(:posts_count, self.taggings.tag.id)
end
しかし、次を作成すると、次のようになりますPost
。
undefined method `tag' for []:ActiveRecord::Relation
この部分に何か問題があると思いますがself.taggings.tag.id
、修正方法がよくわかりません。
助言がありますか?
モデル:
**post.rb:**
has_many :taggings, dependent: :destroy
has_many :tags, through: :taggings
**tag.rb:**
has_many :taggings, :dependent => :destroy
has_many :posts, :through => :taggings
**tagging:**
attr_accessible :tag_id, :post_id
belongs_to :post
belongs_to :tag
編集
post.rb:
before_save :publish_post
protected
def publish_post
if self.status == "Published" && self.published_at.nil?
self.published_at = Time.now
end
end
tagging.rb:
private
def increment_tag_counter_cache
if self.post.status == "Published" && self.post.published_at.nil?
Tag.increment_counter(:posts_count, self.tag.id)
end
end