Короткий ответ - нет, не знаешь.
В руководствах RubyOnRails миграции ActiveRecord для создания таблиц объединения демонстрируют примеры без них и индексы, создаваемые аналогично вашим.
При этом я предполагаю, что в миграции есть опечатка, так как имена таблиц с заглавными буквами (то есть: :Accounts
и :Suppliers
даже не завершат миграцию). Посмотрите имя индекса, которое он пытается создать:
CREATE INDEX "index_Accounts_Suppliers_on_account_id_and_supplier_id" ON "Accounts_Suppliers" ("account_id", "supplier_id")
и становится понятно, почему это не получается.
Я не увидел соответствующих изменений в журналах изменений ActiveRecord ( 5.0 , 5.1 и 5.2 ), но делал это следующим образом:
class CreateBaseTables < ActiveRecord::Migration[5.2]
def change
create_table :suppliers do |t|
t.string :name
end
create_table :accounts do |t|
t.string :name
end
end
end
class CreateJoinTable < ActiveRecord::Migration[5.2]
def change
create_join_table :accounts, :suppliers do |t|
t.index [:account_id, :supplier_id]
t.index [:supplier_id, :account_id]
end
end
end
Я могу запустить ваш пример без проблем. Так что возникает вопрос: правильно ли определены другие ваши таблицы?