如何为我的模型中的两列添加唯一性和添加索引的组合?

时间:2016-08-21 07:16:13

标签: ruby-on-rails

我在迁移文件中完成了以下代码。但它不起作用,也会返回错误。我也在使用scope

def change
  add_column :load_shortlisted_trucks, :load_id, :integer
  add_index :load_shortlisted_trucks, :load_id, name: "load_id"
  add_column :load_shortlisted_trucks, :company_truck_type_id, :integer
  add_index :load_shortlisted_trucks, :company_truck_type_id, name: "company_id"
  add_index :load_shortlisted_trucks, [:company_truck_type_id, :load_id], unique: true
end

错误:

== 20160821065543 AddIndexToLoadShortlistedTrucks: migrating ==================
-- add_column(:load_shortlisted_trucks, :load_id, :integer)
   -> 0.0017s
-- add_index(:load_shortlisted_trucks, :load_id, {:name=>"load_id"})
   -> 0.0545s
-- add_column(:load_shortlisted_trucks, :company_truck_type_id, :integer)
   -> 0.0013s
-- add_index(:load_shortlisted_trucks, :company_truck_type_id, {:name=>"company_id"})
   -> 0.0061s
-- add_index(:load_shortlisted_trucks, [:company_truck_type_id, :load_id], {:unique=>true})
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled: Index name 'index_load_shortlisted_trucks_on_company_truck_type_id_and_load_id' on table 'load_shortlisted_trucks' is too long; the limit is 63 characters     

任何人都可以告诉我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题在于最后add_index行的索引名称。索引名称的长度太长(166个字符)。为避免迁移错误,您可以使用index选项传递name名称。

从文档中

  

add_index

     

索引将以表和列名命名,除非您传递:name作为选项。

替换最后的add_index
add_index :load_shortlisted_trucks, [:company_truck_type_id,:load_id], unique:true, name: 'my_index_name'