我运行了以下迁移:
rails generate migration add_username_to_users username:string
然后我尝试了两种方法来增加它的唯一性:
class AddUsernameToUsers < ActiveRecord::Migration
def change
add_column :users, :username, :string, :unique => true
end
# or add_index :users, :username, :unique => true
end
但这对我不起作用。我知道我可以运行另一个迁移来添加索引,但我想知道在添加列时是否可以编制索引?这样我就可以将迁移量保持在最低限度。
答案 0 :(得分:4)
add_column
没有:unique
选项,因此:unique => true
add_column :users, :username, :string, :unique => true
被忽略。您可以在一次迁移中一次完成两件事,只需将add_index
添加到AddUsernameToUsers迁移中即可:
class AddUsernameToUsers < ActiveRecord::Migration
def change
add_column :users, :username, :string, :unique => true
add_index :users, :username, :unique => true
end
end
答案 1 :(得分:1)
您也可以使用change_table
方法,如此
class AddUsernameToUsers < ActiveRecord::Migration
def change
change_table(:users) do |t|
t.string :username
t.index :username, :unique => true
end
end
end
使用change_table
的优点是,对于mysql,您可以传递:bulk => true
,这会生成单个ALTER TABLE
sql语句,因此对于大型表来说更快(因为mysql有效地复制了整个每次你做一个转换表时表格)