Ruby on rails 更改列名并设置默认值

Ruby on rails 更改列名并设置默认值,ruby-on-rails,Ruby On Rails,我运行: 但是现在,我想将列的名称更改为“hide_msg”,并将默认值设置为false 请问我怎么做 我读到我必须做一些事情,比如: 第一步: rails generate migration AddShowmsgColumnToPublishers show_msg:boolean rake db:migrate rails generate migration FixColumnName class FixColumnName < ActiveRecord::Migration

我运行:

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

请问我怎么做

我读到我必须做一些事情,比如:

第一步:

rails generate migration AddShowmsgColumnToPublishers show_msg:boolean
rake db:migrate
rails generate migration FixColumnName

class FixColumnName < ActiveRecord::Migration
  def change
    rename_column :publishers, :show_msg, :hide_msg
  end
end
def up
    change_column :profiles, :show_attribute, :boolean, :default => false
end

def down
    change_column :profiles, :show_attribute, :boolean, :default => nil
end
第三步:将文件编辑为:

rails generate migration add_default_value_to_hide_msg
最后:

rails generate migration AddShowmsgColumnToPublishers show_msg:boolean
rake db:migrate
rails generate migration FixColumnName

class FixColumnName < ActiveRecord::Migration
  def change
    rename_column :publishers, :show_msg, :hide_msg
  end
end
def up
    change_column :profiles, :show_attribute, :boolean, :default => false
end

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

但是一个命令没有其他方法吗?

您可以执行rake
db:rollbackstep=2

您可以用2代替您想要返回的迁移次数

然后简单地做:

rake db:migrate

您也可以在一次迁移中同时指定这两项。e、 g

rails generate migration AddHidemsgColumnToPublishers hide_msg:boolean

rake db:migrate
class-FixColumnfalse
结束
降下
重命名列:publisher,:hide\u msg,:show\u msg
更改列:publisher,:show\u msg,:boolean,:default=>nil
结束
结束

然后运行
rakedb:migrate
。适合我:)

谢谢。。我做了:db:rollback STEP=2,但我犯了一个错误。。我想做:db:rollback STEP=1。。如何更改它?
rake db:migrate:redo VERSION=my_VERSION
如果表没有从Rails之外的数据库中删除,
rake db:migrate:up VERSION=my_VERSION
我如何知道我的版本是什么?只是提醒一下,除非在执行回滚后编辑迁移,否则这将无法工作。运行rake db:migrate after时,除非删除迁移,否则仍将添加show_msg列(如果您已经在远程存储库上提交了文件,则不建议这样做)。正确的方法是创建一个新的迁移来重命名该列。@jvnill yes您是对的,您需要在回滚后编辑该表并删除
show_msg
列,否则在执行
rake db:migrate
时,它将再次创建该列。提醒您,在使用up和down方法时,确保down方法上的第一个代码与up方法上的最后一个代码相反。这个实现没有问题,因为订单对于这个特定的应用程序并不重要migration@jvnill谢谢你的澄清。。但是在这种情况下,我们不能使用
change
方法,因为
change\u列
具有remaned\u列的名称。因此,在回滚迁移时将抛出错误。:)是的,我明白了。我也会这样回答的。