counter_cache不适用于简单模型

时间:2014-08-06 22:18:23

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

我的帖子有很多赞成票。我想添加一个counter_cache,这样我就可以快速获得每个帖子的upvotes数量。

Post和PostUpvote模型:

class Post < ActiveRecord::Base
  belongs_to :user
  has_many :post_upvotes
end

class PostUpvote < ActiveRecord::Base
  belongs_to :user
  belongs_to :post, counter_cache: true
end

迁移以添加counter_cache列:

class AddPostUpvotesCountToPost < ActiveRecord::Migration
  def change
    add_column :posts, :post_upvotes_count, :integer
  end
end

在我的数据库中,post_upvotes_count列为空,从我的日志中我仍在执行SELECT COUNT(*) FROM "post_upvotes" WHERE "post_upvotes"."post_id" = $1 [["post_id", 1234]],这意味着cache_counter无效。知道我缺少什么让cache_counter工作吗?

1 个答案:

答案 0 :(得分:1)

回滚迁移

rake db:rollback

然后将迁移更改为

add_column :posts, :post_upvotes_count, :integer, :default => 0

然后再次迁移

rake db:migrate

如果您没有设置初始默认值,它将无法正常工作。