我要让"rake"流产了...posts_计数被标记为只读错误.

我有两个模型:用户模型和帖子模型.

users has_many posts.

posts belongs_to :user, :counter_cache => true

我进行了一次迁移,将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

当我运行迁移时,我得到了一个错误.当然,这是非常明确的,如果我从posts模型中删除:counter_cache声明,例如.

belongs_to :user

迁移运行良好.这显然是没有意义的,因为你不能用这种方式实现它.我错过了什么?

推荐答案

你应该用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

Ruby-on-rails相关问答推荐

为什么Rails数值验证器不使用规格化值?

Rails 5.1.7:Sprockets::Rails::Helper::AssetNotFound

Rails 7 中的预编译

错误:部署到 Heroku 时找不到模块tailwindcss/defaultTheme

Rails:用于创建固定长度 char(12) 列的迁移

如何在 rails 中指定和验证枚举?

对于 Visual Studio 用户来说,最好的 Ruby on Rails 环境是什么?

指定要从 before_filter 中排除的控制器

Phusion 乘客(适合傻瓜!)

在 Controller 中调用模型方法

如何在Ruby 中对数字进行上限和舍入

如果缺少翻译,则回退到默认语言

通过重定向使闪存哈希保持不变

Rails:进行不可逆转的迁移是不是很糟糕?

加载常量时自动加载常量时检测到循环依赖

'respond_to' 格式语句中的 `:location => ...` 和 `head :ok` 是什么意思?

Coffeescript ||= 模拟?

Ruby 1.87 与 1.92 Date.parse

您可以在弹性 beantalk 环境中运行 rails 控制台或 rake 命令吗?

错误:删除表违反外键约束.密钥 id 仍然从表中引用(很多)