Итак, у меня есть такая create_table для курсов в школе:
create_table :courses do |t|
t.string :name
t.references :course
t.timestamps
end
но я хочу, чтобы он ссылался на два других курса, например:
has_many :transferrable_as # A Course
has_many :same_as # Another Course
Могу я сказать следующее?
t.references :transferrable_as, :as=> :course
ruby-on-rails
associations
migration
зеркало
источник
источник
foreign_key
опцию при создании таблицы таким образом, возникает ошибка, говорящая, что та самая таблица, которую я создаю, не существует ... Так что я подозреваю, что на самом деле она не поддерживается официальным API.index
это уже добавлено во внешние ключи в Rails stackoverflow.com/questions/39769981/…Сделать это можно так:
или используя
t.belongs_to
как псевдоним дляt.references
Вы не можете добавить
foreign_key: true
к этим двум ссылкам строки. Если вы хотите пометить их как внешние ключи на уровне базы данных, вам необходимо выполнить миграцию следующим образом:Обновить
В Rails 5.1 и выше вы можете добавить внешний ключ в миграцию в
create_table
блоке следующим образом:источник
foreign_key: true
к ссылкам, сбивало меня с толку. Добавлениеadd_foreign_key
и указание имени столбца для них помогло.schema_plus
драгоценный камень. В документации add_reference Rails не упоминаются параметры a: links .references:
опция (в отличие от того,t.references
разве это не будет актуально только на уровне модели, с учетом соображений foreign_keyadd_foreign_key
?t.references
говорит: «Добавьте в эту таблицу поле, которое является первичным ключом другой таблицы».references:
Опция указывает , что какая таблица это первичный ключ (требуется , если не ясно , по имени поля). Здесьadd_foreign_key
функция сообщает базе данных о принудительной ссылочной целостности.add_foreign_key
строки заботятся о том, чтобы сообщить базе данных, что является внешним ключом и чем.references:
Параметр не делает ничего.Я думаю, что у этого потока есть другой способ, более похожий на Rails: Scaffolding ActiveRecord: два столбца с одинаковым типом данных
В миграции:
источник
PG::UndefinedTable: ERROR
когда пытается добавить ограничение внешнего ключа в таблицу, которой не существует.belongs_to
это просто псевдоним , чтобыreferences
и поэтому имеет точно такую же функциональность.В качестве дополнительного ответа на этот вопрос - Модель должна иметь следующую строку для завершения ассоциации:
источник
Я не думаю, что
references
примет этот:as
вариант, но вы можете создавать свои столбцы вручную ...источник