Используйте add_foreign_key для ссылки на ту же модель в рельсах - PullRequest
0 голосов
/ 23 октября 2019

У меня есть модель автомобиля

Я хочу создать отношение, подобное следующему:

belongs_to :primary_car, class_name: 'Car'
has_many :secondary_cars, class_name: 'Car', foreign_key: 'primary_car_id'

Как я могу написать миграцию с использованием, в частности, add_foreign_key, чтобы создать стороннююключ primary_car_id для моей модели банки?

1 Ответ

0 голосов
/ 23 октября 2019

При создании новой таблицы или добавлении столбца в существующую таблицу с помощью t.references:

class CreateCars < ActiveRecord::Migration[5.0]
  def change
    create_table :cars do |t|
      # aka belongs_to
      t.references :primary_car, foreign_key: { to_table: 'cars' }
      t.timestamps
    end
  end
end

class AddPrimaryCarToCars < ActiveRecord::Migration[5.0]
  def change
    change_table :cars do |t|
      # aka belongs_to
      t.references :primary_car, foreign_key: { to_table: 'cars' }
    end
  end
end

Чтобы добавить ограничение внешнего ключа в существующий столбец:

class AddForeignKeyToCars < ActiveRecord::Migration[5.0]
  def change
    # the column cars.primary_car_id must already exist
    add_foreign_key :cars, :cars, column: :primary_car_id
  end
end

Это известно как self-join или ассоциативная ссылка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...