NJ.*_*NJ. 43 ruby-on-rails counter-cache
我得到'耙子流产!... posts_count标记为只读'错误.
我有两个模型:用户和帖子.
users has_many posts.
posts belongs_to :user, :counter_cache => true
Run Code Online (Sandbox Code Playgroud)
我有一个迁移,它将posts_count列添加到users表,然后计算并记录每个用户的当前帖子数.
self.up
add_column :users, :posts_count, :integer, :default => 0
User.reset_column_information
User.all.each do |u|
u.update_attribute( :posts_count, u.posts.count)
end
end
Run Code Online (Sandbox Code Playgroud)
当我运行迁移时,我收到错误.这当然非常明确,如果我从posts模型中删除:counter_cache声明,例如
belongs_to :user
Run Code Online (Sandbox Code Playgroud)
迁移运行正常.显然,这没有意义,因为你无法以这种方式真正实现它.我错过了什么?
Ada*_*sek 97
你应该User.reset_counters这样做.另外,我建议使用find_each而不是each因为它将批量迭代集合而不是一次性.
self.up
add_column :users, :posts_count, :integer, :default => 0
User.reset_column_information
User.find_each do |u|
User.reset_counters u.id, :posts
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6836 次 |
| 最近记录: |