我的帖子有很多赞成票。我想添加一个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工作吗?
答案 0 :(得分:1)
回滚迁移
rake db:rollback
然后将迁移更改为
add_column :posts, :post_upvotes_count, :integer, :default => 0
然后再次迁移
rake db:migrate
如果您没有设置初始默认值,它将无法正常工作。