为什么counter_cache不起作用

时间:2011-05-31 08:29:30

标签: ruby-on-rails ruby-on-rails-3

我使用counter_cache来计算用户的帖子号码,但它不起作用。

#Post Model    
class Post < ActiveRecord::Base
    belongs_to :user, :counter_cache => true
end

#User Model
class User < ActiveRecord::Base
  has_many :posts
end

我的用户表中有一个帖子表和一个posts_count

当我创建一个新帖子时,posts_count不能计算数字,只需停止0.很奇怪的问题。我错过了什么?

--------------------更多细节------------------

我跟踪创建动作:

User Load (0.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
SQL (0.0ms)  BEGIN
SQL (7.0ms) describe `posts`AREL (0.0ms)INSERT INTO `posts` (`user_id`, `title`, `content`, `created_at`, `updated_at`) VALUES (NULL, 'test', 'test','2011-06-01 07:29:10', '2011-06-01 07:29:10')
SQL (54.0ms) COMMIT
SQL (0.0ms) BEGIN
AREL (1.0ms)UPDATE `posts` SET `user_id` = 1, `updated_at` = '2011-06-01 07:29:10' WHERE `posts`.`id` = 16[0m
SQL (38.0ms) COMMIT
Redirected to http://localhost:3000/user/post
Completed 302 Found in 250ms

---------------------现在好了---------------------

在我的帖子创作中:

#I change the following code 
#@post = Post.create(params[:post])
#@user.posts << @post

@post = @user.posts.build(params[:post])
@post.save

1 个答案:

答案 0 :(得分:1)

您应该知道保存和创建是不同的,与销毁和删除相同。

保存和删除不会通过任何回调,因此它不会更新缓存计数器。如果要更新缓存计数器,则应使用create。