Answers:
您可以仅针对索引运行另一个迁移:
class AddIndexToTable < ActiveRecord::Migration
def change
add_index :table, :user_id
end
end
:table
是实际的表名,所以在的情况users
表,你会替代:users
的:table
。
如果需要创建一个,user_id
则可以合理地假设您正在引用用户表。在这种情况下,迁移应为:
rails generate migration AddUserRefToProducts user:references
此命令将生成以下迁移:
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :user, :product, index: true
end
end
运行后rake db:migrate
既user_id
列和索引将被添加到products
表中。
如果你只需要一个索引添加到现有的塔,例如name
一的user
表,下面的技术可能会有所帮助:
rails generate migration AddIndexToUsers name:string:index
将产生以下迁移:
class AddIndexToUsers < ActiveRecord::Migration
def change
add_column :users, :name, :string
add_index :users, :name
end
end
删除add_column
行并运行迁移。
在上述情况下,您可能已经发出rails generate migration AddIndexIdToTable index_id:integer:index
命令,然后add_column
从生成的迁移中删除行。但我宁愿建议撤消初始迁移并改为添加参考:
rails generate migration RemoveUserIdFromProducts user_id:integer
rails generate migration AddUserRefToProducts user:references
在创建列之后,添加以下生成的迁移(示例)
add_index :photographers, :email, :unique => true
有关参考,您可以致电
rails generate migration AddUserIdColumnToTable user:references
如果将来您需要添加一般索引,则可以启动该索引
rails g migration AddOrdinationNumberToTable ordination_number:integer:index
生成代码:
class AddOrdinationNumberToTable < ActiveRecord::Migration
def change
add_column :tables, :ordination_number, :integer
add_index :tables, :ordination_number, unique: true
end
end