Слишком длинное имя индекса для миграции активной записи. Попытка добавления индекса вручную, та же ошибка - PullRequest
0 голосов
/ 09 сентября 2018

Итак, я успешно создавал таблицы объединения, используя параметр name при добавлении индекса, но я не уверен, почему это не работает, когда я пытаюсь создать новую миграцию:

class CreateVMailCampaignScheduleHours < ActiveRecord::Migration[5.1]
  def change
    create_table :v_mail_campaign_schedule_hours do |t|
      t.belongs_to :v_mail_campaign_schedule, foreign_key: true
      t.string :day
      t.time :start_hours
      t.time :stop_hours

      t.timestamps
    end
    add_index [:v_mail_campaign_schedule_hours, :v_mail_campaign_schedule_id], name: :v_mail_campaign_schedule_id
  end
end

Я получаю ошибку:

ArgumentError: Имя индекса 'Index_v_mail_campaign_schedule_hours_on_v_mail_campaign_schedule_id' в таблице v_mail_campaign_schedule_hours слишком длинный; предел составляет 64 символы

Есть предложения? Я думал, что мой add_index справится, но, очевидно, нет.

1 Ответ

0 голосов
/ 09 сентября 2018

Вы можете изменить его на следующее:

class CreateVMailCampaignScheduleHours < ActiveRecord::Migration[5.1]
  def change
    create_table :v_mail_campaign_schedule_hours do |t|
      t.bigint :v_mail_campaign_schedule
      t.string :day
      t.time :start_hours
      t.time :stop_hours

      t.timestamps
    end
    add_index :v_mail_campaign_schedule_hours, :v_mail_campaign_schedule_id, name: :index_campaign_schedule_hours_on_schedule
  end
end

Ваш подход к созданию индекса вручную является правильным. Однако t.belongs_to, который является псевдонимом для t.reference, дает указание создать столбец внешнего ключа и соответствующий индекс. Поэтому Rails все еще пытается создать индекс, прежде чем достигнет add_index. Использование простого t.bigint не создает индекс.

...