Для добавления внешних ключей к таблицам можно расширать класс ActiveRecord::Migration
добавив в него следующий метод
def self.foreign_key(from_table, from_column, to_table)
constraint_name = "fk_#{from_table}_#{from_column}"
execute %{alter table #{from_table}
add constraint #{constraint_name}
foreign key (#{from_column}) references #{to_table}(id)}
end
Теперь можно использовать
def self.up
create_table ... do
end
foreign_key(:line_items, :product_id, :products)
foreign_key(:line_items, :order_id, :orders)
end
Но возможно вы заходите добавить этот метот так что бы он был доступен во всех остальных миграциях. Для этого создадим файл migration_helpers.rb в папке lib.
module MigrationHelpers
def foreign_key(from_table, from_column, to_table)
constraint_name = "fk_#{from_table}_#{from_column}"
execute %{alter table #{from_table}
add constraint #{constraint_name}
foreign key (#{from_column})
references #{to_table}(id)}
end
end
Теперь для добавления этого метода к миграции добавляем следующие строки в ваш миграционный файл.
require "migration_helpers" #подключаем хелпер
class CreateLineItems < ActiveRecord::Migration
extend MigrationHelpers #загружаем метод
|