添加:默认=>符合现有Rails列中的布尔值

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

试了change_column建议。

$ change_column :profiles, :show_attribute, :boolean, :default => true

返回-bash: change_column: command not found

然后又试了:

$ rails g change_column :profiles, :show_attribute, :boolean, :default => true

$ rails change_column :profiles, :show_attribute, :boolean, :default => true

然后跑rake db:migrate的价值:show_attribute留着nil。在上面提到的问题中,它在PostgreSQL中说,需要手动更新它。由于我使用PostgreSQL,所以我在create_profiles移徙:

t.boolean :show_attribute, :default => true

谁能告诉我我在这里做错了什么吗?

提问于
用户回答回答于

change_column是一种方法ActiveRecord::Migration所以你不能在控制台里这样叫它。

如果要为该列添加默认值,请创建一个新迁移:

rails g migration add_default_value_to_show_attribute

然后在创建的迁移中:

def up
  change_column :profiles, :show_attribute, :boolean, default: true
end

def down
  change_column :profiles, :show_attribute, :boolean, default: nil
end

创建一个rake task或者直接进去rails console更新所有记录。

当你加入t.boolean :show_attribute, :default => truecreate_profiles迁移,如果它什么都不做,那是正常的。只执行尚未运行的迁移。如果从一个新的数据库开始,那么它会将默认值设置为true。

用户回答回答于

可以使用change_column_default方法在迁移中:

def up
  change_column_default :profiles, :show_attribute, true
end

def down
  change_column_default :profiles, :show_attribute, nil
end

扫码关注云+社区