Jon*_*Jon 259 ruby migration ruby-on-rails
如何向通过迁移已存在的列添加默认值?
我可以找到的所有文档都向您展示了如果列尚不存在但是在这种情况下它是如何实现的.
Mau*_*res 336
这是你应该怎么做的:
change_column :users, :admin, :boolean, :default => false
Run Code Online (Sandbox Code Playgroud)
但是某些数据库(如PostgreSQL)不会更新以前创建的行的字段,因此请确保在迁移时手动更新字段.
Gaz*_*zza 184
change_column_default :employees, :foreign, false
Run Code Online (Sandbox Code Playgroud)
csi*_*csi 108
对于Rails 4+,请使用change_column_default
def change
change_column_default :table, :column, value
end
Run Code Online (Sandbox Code Playgroud)
bfc*_*der 46
使用def change意味着您应该编写可逆的迁移.并且change_column不可逆转.你可以上去,但你不能下去,因为change_column是不可逆转的.
相反,虽然它可能是一些额外的行,你应该使用def up和def down
因此,如果您的列没有默认值,那么您应该这样做以添加默认值.
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: nil
end
Run Code Online (Sandbox Code Playgroud)
或者,如果要更改现有列的默认值.
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: true
end
Run Code Online (Sandbox Code Playgroud)
Pra*_*rge 34
从Rails 4开始,您无法生成迁移以将列添加到具有默认值的表中 .以下步骤将新列添加到现有表,其默认值为true或false.
$ rails generate migration add_columnname_to_tablename columnname:boolean
Run Code Online (Sandbox Code Playgroud)
上面的命令将在表中添加一个新列.
class AddColumnnameToTablename < ActiveRecord::Migration
def change
add_column :table_name, :column_name, :boolean, default: false
end
end
Run Code Online (Sandbox Code Playgroud)
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)
小智 8
执行:
rails generate migration add_column_to_table column:boolean
Run Code Online (Sandbox Code Playgroud)
它将生成此迁移:
class AddColumnToTable < ActiveRecord::Migration
def change
add_column :table, :column, :boolean
end
end
Run Code Online (Sandbox Code Playgroud)
设置默认值add:default => 1
add_column:table,:column,:boolean,:default => 1
跑:
rake db:migrate
roo*_*ler -62
这是你可以做的:
class Profile < ActiveRecord::Base
before_save :set_default_val
def set_default_val
self.send_updates = 'val' unless self.send_updates
end
end
Run Code Online (Sandbox Code Playgroud)
编辑:......但显然这是一个菜鸟错误!
| 归档时间: |
|
| 查看次数: |
146024 次 |
| 最近记录: |