Rails:添加列后添加索引
假设我在Rails应用程序中创build了一个表格table 。 一段时间后,我添加了一个列运行: 
 rails generate migration AddUser_idColumnToTable user_id:string. 
 然后我意识到我需要添加user_id作为索引。 我知道add_index方法,但是应该在哪里调用这个方法? 我应该运行一个迁移(如果是,哪一个?),然后手动添加这个方法? 
你可以运行另一个迁移,只是为了索引:
 class AddIndexToTable < ActiveRecord::Migration def change add_index :table, :user_id end end 
 如果你需要创build一个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列和索引都将被添加到product表中。 
 如果你只是需要添加一个索引到一个现有的列,例如user表的name ,下面的技术可能会有所帮助: 
  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行。 但我宁愿build议撤消初始迁移并添加引用: 
 rails generate migration RemoveUserIdFromProducts user_id:integer rails generate migration AddUserRefToProducts user:references 
创build列后添加生成的迁移以下(示例)
 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 :dt_json_structs, :ordination_number, unique: true end end