我在迁移文件中完成了以下代码。但它不起作用,也会返回错误。我也在使用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
任何人都可以告诉我该如何解决这个问题?
答案 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'