wul*_*tch 190 ruby-on-rails rails-migrations
我有问题,我在Rails中有一个迁移设置列的默认设置,如下例所示:
def self.up
add_column :column_name, :bought_at, :datetime, :default => Time.now
end
Run Code Online (Sandbox Code Playgroud)
假设,我想在以后的迁移中删除默认设置,如何使用rails迁移?
我目前的解决方法是在rails迁移中执行自定义sql命令,如下所示:
def self.up
execute 'alter table column_name alter bought_at drop default'
end
Run Code Online (Sandbox Code Playgroud)
但我不喜欢这种方法,因为我现在依赖于底层数据库如何解释这个命令.如果数据库发生更改,此查询可能不再起作用,迁移将被破坏.那么,有没有办法表示在rails中删除列的默认设置?
Jer*_*ack 386
def change
change_column_default( :table_name, :column_name, from: nil, to: false )
end
Run Code Online (Sandbox Code Playgroud)
def up
change_column_default( :table_name, :column_name, nil )
end
def down
change_column_default( :table_name, :column_name, false )
end
Run Code Online (Sandbox Code Playgroud)
Ser*_*erx 23
正如文档指出的那样,听起来你正在用'执行'做正确的事情:
Run Code Online (Sandbox Code Playgroud)change_column_default(table_name, column_name, default)为列设置新的默认值. 如果要将默认值设置为NULL,则表示运气不佳.您需要DatabaseStatements#自己执行适当的SQL语句. 例子
Run Code Online (Sandbox Code Playgroud)change_column_default(:suppliers, :qualification, 'new') change_column_default(:accounts, :authorized, 1)
Ale*_*una 14
我用以创建NULL列的以下代码段NOT NULL,但跳过DEFAULT架构级别:
def self.up
change_column :table, :column, :string, :null => false, :default => ""
change_column_default(:table, :column, nil)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43448 次 |
| 最近记录: |