3

我跑:

rails generate migration AddShowmsgColumnToPublishers show_msg:boolean
rake db:migrate

但是现在,我想将列的名称更改为“hide_msg”并将默认值设置为 false。

请问我该怎么做?

我读到我必须做类似的事情:

第一步:

rails generate migration FixColumnName

class FixColumnName < ActiveRecord::Migration
  def change
    rename_column :publishers, :show_msg, :hide_msg
  end
end

第二步:

rails generate migration add_default_value_to_hide_msg

第三步:将文件编辑成:

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

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

最后:

rake db:migrate

但是没有其他方法可以使用一个命令吗?

4

2 回答 2

8

您也可以在一次迁移中同时指定两者。例如

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

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

于 2013-02-06T09:16:19.170 回答
2

你可以做 rake db:rollback STEP=2

您可以将 2 替换为您想要返回的任意数量的迁移。

然后简单地做:

rails generate migration AddHidemsgColumnToPublishers hide_msg:boolean

rake db:migrate
于 2013-02-06T09:02:34.953 回答