sql - 使用 Rails 和 Postgresql 迁移时不填充默认值

标签 sql ruby-on-rails ruby-on-rails-3 postgresql

我目前正在尝试运行此迁移:

class AddDroppedProjectsCountToUser < ActiveRecord::Migration
  def self.up
    add_column :users, :dropped_projects, :integer, {:default=>0, :required=>true}
  end

  def self.down
    remove_column :users, :dropped_projects
  end
end

该列已正确添加,但所有旧记录均未填充 0。它们为零。我也尝试过使用 default=>'0',但无济于事。知道为什么会这样吗? ( rails 3.0.3)


编辑添加:当我创建一个新用户时,它工作正常,一切看起来都是正确的。表中该值仍然为零的只是老用户。

最佳答案

如果你说会发生什么:

def self.up
  add_column :users, :dropped_projects, :integer, :null => false, :default => 0
end

相反?如果没有 :null=>false,您仍然允许 dropped_projects 中的 NULL,因此 PostgreSQL 没有理由将它们设置为 0。此外,我不要认为 :requiredadd_column 的有效选项;由于选项只是一个简单的 Hash 并且 add_column 只查找它知道的选项,因此您的杂散 :required 选项将被默默地忽略。

关于sql - 使用 Rails 和 Postgresql 迁移时不填充默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5197983/

相关文章:

ruby-on-rails - 如何设置mongoid的时区

ruby-on-rails - "Error": errors. 添加不只显示 locales/xx.yml 中的消息

MYSQL数据库服务器优化: Queries very slow with many connections

mysql - 在 MYSQL 中使用多个条件

java - 查询多对多关系数据库表

sql - 在 postgresql json 字段中选择键的唯一值

ruby - rbenv 和 passenger - 无法从非 root 用户帐户(sudo 组)安装

sql - Postgresql在BEGIN附近创建函数语法错误

javascript - 如何通过 jQuery 发送选定的元素和文本输入

ruby-on-rails - 如何在 rails 中通过命令行运行 rake 任务