Ответ 1
Я думаю, что этот поток имеет другой путь Rails-ish: Леса ActiveRecord: два столбца одного и того же типа данных
В процессе миграции:
t.belongs_to: transferrable_as
t.belongs_to: same_as
Итак, у меня есть такая таблица 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
Я думаю, что этот поток имеет другой путь Rails-ish: Леса ActiveRecord: два столбца одного и того же типа данных
В процессе миграции:
t.belongs_to: transferrable_as
t.belongs_to: same_as
Вы можете сделать это следующим образом:
create_table :courses do |t|
t.string :name
t.references :transferrable_as, references: :courses
t.references :same_as, references: :courses
t.timestamps
end
или используя t.belongs_to
в качестве псевдонима для t.references
Вы не можете добавить foreign_key: true
в эти две строки ссылок. Если вы хотите пометить их как внешние ключи на уровне базы данных, вам необходимо выполнить миграцию с этим:
add_foreign_key :courses, :courses, column: :transferrable_as_id
add_foreign_key :courses, :courses, column: :same_as_id
Вы можете сделать все это в определении начальной миграции/столбца (по крайней мере, в настоящее время в Rails 5):
t.references :transferable_as, index: true, foreign_key: { to_table: :courses }
t.references :same_as, index: true, foreign_key: { to_table: :courses }
Я не думаю, что references
принимает параметр :as
, но вы можете создавать свои столбцы вручную...
create_table :courses do |t|
t.string :name
t.integer :course1_id
t.integer :course2_id
t.timestamps
end
В качестве дополнительного ответа на этот вопрос: для завершения ассоциации модель должна иметь следующую строку:
belongs_to :transferrable_as, class_name: "Course"
belongs_to :same_as, class_name: "Course"