更改列名称并创建默认值

Alo*_*iel 3 ruby-on-rails

我跑:

rails generate migration AddShowmsgColumnToPublishers show_msg:boolean
rake db:migrate
Run Code Online (Sandbox Code Playgroud)

但现在,我想将列的名称更改为"hide_msg"并将默认值设置为false.

我该怎么办?

我读过我必须做的事情:

第一步:

rails generate migration FixColumnName

class FixColumnName < ActiveRecord::Migration
  def change
    rename_column :publishers, :show_msg, :hide_msg
  end
end
Run Code Online (Sandbox Code Playgroud)

第二步:

rails generate migration add_default_value_to_hide_msg
Run Code Online (Sandbox Code Playgroud)

第三步:将文件编辑为:

def up
    change_column :profiles, :show_attribute, :boolean, :default => false
end

def down
    change_column :profiles, :show_attribute, :boolean, :default => nil
end
Run Code Online (Sandbox Code Playgroud)

最后:

rake db:migrate
Run Code Online (Sandbox Code Playgroud)

但是一个命令没有别的办法吗?

Man*_*nga 7

您也可以在单个迁移中指定它们.例如

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

  def down
    rename_column :publishers, :hide_msg, :show_msg
    change_column :publishers, :show_msg, :boolean, :default => nil
  end
end
Run Code Online (Sandbox Code Playgroud)

然后运行rake db:migrate.对我来说很好:)