我有一个表'用户',列'电子邮件'。它曾经是唯一的(带索引),但新的要求是允许那里的nils。
是否有比以下更好的解决方案:
remove_index :users, :email
add_index :users, :email
最初它添加了唯一选项:
add_index :users, :email, :unique => true
答案 0 :(得分:35)
我会说你有正确的解决方案,因为索引需要重新生成,因此没有update_index
。
答案 1 :(得分:12)
嘿,这是我刚刚编写的一个迁移工作得非常好的迁移。我有一个表'scraped_episodes',其列为varchar(255)'enclosureUrl'。我需要将这个更长的时间用于长网址,所以这就是我使用的(Rails 3.2.13)
class ExpandEnclosureUrl < ActiveRecord::Migration
def up
# remove index cuz we need to
remove_index :scraped_episodes, :enclosureUrl
# change length to 2048 characters
change_column :scraped_episodes, :enclosureUrl, :text, :limit=>2048
# redo this index to only index the first 255 chars
add_index :scraped_episodes, :enclosureUrl, :length => 255
end
def down
# remove index cuz we need to
remove_index :scraped_episodes, :enclosureUrl
# use the same settings at when i first created this field
change_column :scraped_episodes, :enclosureUrl, :string, :limit=>nil
# use the same settings as when i first added this index
add_index :scraped_episodes, :enclosureUrl
end
end