tva*_*nt2 8 migration ruby-on-rails-3
我试图改变nil现有的列上一个布尔属性的可能性:access_titles上:profiles表.由于此迁移,该列存在:
class AddAccessItemsToProfiles < ActiveRecord::Migration
def self.up
add_column :profiles, :access_items, :boolean, :default => true
end
def self.down
remove_column :profiles, :access_items, :boolean, :default => nil
end
end
Run Code Online (Sandbox Code Playgroud)
为了改变nil,我试着像往常一样生成迁移:
rails g migration ChangeColumnNull :profiles :access_items :null => false
Run Code Online (Sandbox Code Playgroud)
但这没有做任何事情,所以我做了一个独立的迁移:
rails g migration AddChangeColumnNullToAccessItems
Run Code Online (Sandbox Code Playgroud)
在那之内我补充说:
class AddChangeColumnNullToAccessItems < ActiveRecord::Migration
def self.up
change_column_null :profiles, :access_items, :boolean, false
end
def self.down
change_column_null :profiles, :access_items, :boolean, true
end
end
Run Code Online (Sandbox Code Playgroud)
然后我跑了rake db:migrate,重新启动了我的服务器,没有看到任何变化.所以我尝试过:
class AddChangeColumnNullToAccessItems < ActiveRecord::Migration
def self.up
change_column_null :profiles, :access_items, false
end
def self.down
change_column_null :profiles, :access_items, true
end
end
Run Code Online (Sandbox Code Playgroud)
然后做了同样的事情:rake db:migrate,重新启动服务器,没有任何改变.
我究竟做错了什么?我希望只有布尔值为:access_itemstrue和false而不必转储数据库.
更新:尝试change_column_null :profiles, :access_items, false我收到一个错误:
-- change_column_null(:profiles, :access_items, false)
rake aborted!
An error has occurred, this and all later migrations canceled:
PGError: ERROR: column "access_items" contains null values
: ALTER TABLE "profiles" ALTER "access_items" SET NOT NULL
Run Code Online (Sandbox Code Playgroud)
所以,根据下面的建议,我必须插入change_column_null :profiles, :access_items, false, true我的迁移.
Fre*_*ung 27
您可以使用:
change_column_null :profiles, :access_items, false, 1
Run Code Online (Sandbox Code Playgroud)
第四个参数是可选的,允许您设置列的默认值.当列中包含空值并且您将空值设置为时,这是必需的false.
| 归档时间: |
|
| 查看次数: |
6231 次 |
| 最近记录: |