Ruby on rails 更改列名并设置默认值
我运行: 但是现在,我想将列的名称更改为“hide_msg”,并将默认值设置为false 请问我怎么做 我读到我必须做一些事情,比如: 第一步: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
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列的名称。因此,在回滚迁移时将抛出错误。:)是的,我明白了。我也会这样回答的。