我有一个包含数据的表格,我想添加friendly_id。
我不知道如何构建我的迁移,因为我无法在其中创建一个表:null => false。我想做的是迁移运行FriendlyId,以便构建slug并将其插入数据库。
我目前的迁移情况如下:
class AddSlugToSite < ActiveRecord::Migration
def up
add_column :site, :slug, :string
change_column_null :site, :slug, false
add_index :site, :slug, :unique => true
end
def down
remove_column :site, :slug, :string
end
end
我的模特:
class Site < ActiveRecord::Base
extend FriendlyId
friendly_id :name, :use => :slugged
end
这并不起作用,因为Rails在那里已有数据的情况下无法创建null =&gt; false的字段。
我该怎么做?
由于
答案 0 :(得分:2)
要解决此问题,您需要添加列,但不要放置null:false
。
之后,执行rake任务或其他迁移以填充此列,然后执行其他迁移以执行change_column_null :site, :slug, false
或者您可以在一次迁移中完成所有这些操作,但这可能会很慢:
class AddSlugToSite < ActiveRecord::Migration
def up
add_column :sites, :slug, :string
Site.where('slug is null').each do |site|
site.slug = nil # The documentation says this will regenerate the slug
site.save!
end
change_column_null :site, :slug, false
add_index :sites, :slug, unique: true
end
def down
remove_column :sites, :slug, :string
end
end