web-dev-qa-db-ger.com

Geben Sie bei Verwendung von add_reference einen benutzerdefinierten Indexnamen an

Ich habe folgende Migration

class LinkDoctorsAndSpecializations < ActiveRecord::Migration
  def up
    add_reference :doctors, :doctor_specialization, polymorphic: true, index: true
  end

  def down
    remove_reference :doctors, :doctor_specialization, polymorphic: true
  end
end

wenn ich rake db:migrate laufen lasse, erhalte ich den Fehler

Index name 'index_doctors_on_doctor_specialization_type_and_doctor_specialization_id' on table 'doctors' is too long; the limit is 63 characters

wie kann ich den Indexnamen bei Verwendung von add_reference wie in add_index :table, :column, :name => 'index name' angeben?

15
bhanu

Wie ich kommentierte , mache:

add_index :table, :column, name: 'index name' 

Hier ist Dokumentation . Oder Sie können dies versuchen:

class LinkDoctorsAndSpecializations < ActiveRecord::Migration
  def change
    add_reference :doctors, :doctor_specialization, polymorphic: true, index: { name: 'index name' }
  end
end
42
Arup Rakshit

Das würde tatsächlich funktionieren:

add_index :table, :column, name: 'index name'

Werfen Sie einen Blick für weitere Beispiele.

4
Andrey Deineko

Ich würde nicht vorschlagen, "add_reference" wegzulassen, aber Sie könnten den Hash-Schlüssel für die Option "index" weglassen und dann "add_index" verwenden:

add_reference :table, :column
add_index :table, :column, :name => 'index_table_column'

Oder der passendere Weg wäre so:

add_reference :doctors, :doctor_specialization, polymorphic: true, index: { name: 'index_doctors_doctor_specialization' }
1
donbradken

Ich habe gehört, der beste Weg, dies zu beheben, besteht darin, es einfach aus der Zeile zum Hinzufügen von Verweisen herauszulassen und es wie in der letzten Zeile Ihrer Frage manuell unten anzugeben

add_index :table, :column, :name => 'index name'
0
errata