Я уже видел это, но я не уверен, как применить это в моей конкретной ситуации Как добавить миграцию с несколькими ссылками на одну и ту же модель в одной таблице? Ruby / Rails
Я пытаюсь найти способ, чтобы модель с именем ChildOrganization
ссылалась на 2 столбца из другой модели с именем Organization
в отношении один-ко-многим в Rails 4.2 веб-приложение.
Например, org1 и org2 оба перечислены в модели Организации и имеют столбцы, такие как имя, адрес и т. Д. c ... но в модели ChildOrganization org1_id и org2_id должны быть перечислены в разделе «родитель» и столбцы 'child', чтобы создать пару родитель / потомок. Цель состоит в том, чтобы иметь модель ChildOrganization, которая перечисляет пары двойок из модели организации.
ChildOrganization имеет справочный столбец с именем organization_id
, который ссылается на таблицу Organization, а другой столбец, который просто принимает целое число с именем child_organization_id
в модели организации (приведенное ниже неверно)
has_many :child_organizations, class_name: "ChildOrganization", foreign_key: "organization_id", dependent: :destroy
has_many :child_organizations, class_name: "ChildOrganization", foreign_key: "child_organization_id", dependent: :destroy
в модели ChildOrganization
belongs_to :organization
ОБНОВЛЕНИЕ
Вот что сработало. В модели organization
у меня ниже. Ассоциации могут называться как угодно, они не являются именами моделей \ таблиц. Вы определяете модель с помощью class_name
# child_organization_parents/children associations map to foreign keys in the ChildOrganization table
has_many :child_organization_parents, class_name: "ChildOrganization", foreign_key: "parent_org_id", dependent: :destroy
has_many :child_organization_children, class_name: "ChildOrganization", foreign_key: "child_org_id", dependent: :destroy
в ChildOrganization
модели
belongs_to :organization
миграция выглядит следующим образом, я добавил проверку на ноль, а также индекс
create_table :child_organizations do |t|
t.integer :parent_org_id, null: false, index: true
t.integer :child_org_id, null: false, index: true
t.timestamps null: false
end
вот команда, которую я использовал для создания модели, которая будет содержать 2 внешних ключа, не забудьте добавить null: false и index: true в файл миграции перед его запуском.
rails g model ChildOrganization parent_org_id:integer child_org_id:integer --no-assets --no-test-framework