ruby-on-rails - 列的默认值

标签 ruby-on-rails migration default-value

我跑:

rails 生成迁移 AddHidemsgColumnToPublishers hide_msg:boolean

然后创建了下一个文件:

class AddHidemsgColumnToPublishers < ActiveRecord::Migration
  def change
    add_column :publishers, :hide_msg, :boolean
  end
end

我想通过 false 为 hide_msg 设置一个默认值。

所以我尝试了:

rails 生成迁移 add_default_value_to_hide_msg

class AddDefaultValueToHideMsg < ActiveRecord::Migration
  def up
    change_column :publishers, :hide_msg, :boolean, :default => false
  end

  def down
    change_column :publishers, :hide_msg, :boolean, :default => nil
  end
end

但我有错误:

rake db:migrate
==  AddHidemsgColumnToPublishers: migrating ===================================
-- add_column(:publishers, :hide_msg, :boolean, {:default=>false})
rake aborted!
An error has occurred, this and all later migrations canceled:

PG::Error: ERROR:  column "hide_msg" of relation "publishers" already exists
: ALTER TABLE "publishers" ADD COLUMN "hide_msg" boolean DEFAULT 'f'

最佳答案

只是一个建议......不要在数据库中设置默认值,因为如果你想稍后更改它可能会遇到一些问题。

我认为最好在模型中设置它。

before_save :set_default_high_msg
def set_default_high_msg
  self.high_msg ||= false
end

甚至在你的 Controller 中:

 def new
   @publisher = Publisher.new
   @publisher.high_msg ||= false
 ...
 end

关于ruby-on-rails - 列的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14734143/

相关文章:

jquery - 将页面 View 显示为 jQuery-UI 对话框

ruby-on-rails - 为什么 ruby​​ Base64 编码 64 在编码字符串的末尾添加一个新行

ruby-on-rails - Rails 事件记录 - :includes with only specific fields

node.js - Knex - 已经是最新的

django - MigrationSchemaMissing(无法创建 django_migrations 表(%s)% exc)

scala - 将参数添加到具有默认值的案例类

visual-studio-2010 - VS "cascading style sheet version for validation"可以更改默认值吗?

ruby-on-rails - 如何对序列化属性执行包含验证?

docker - 我可以将包含 Jenkins 设置的 docker 容器移动到其他服务器吗?

scala - Scala主函数的默认参数?