Как сделать ассоциации на этом

0

Изображение 174551

Привет, я новичок в рельсах. Мне надоели активные ассоциации записей. Я изучал ассоциации из направляющих. Тем не менее я не могу найти ясный способ добавить ассоциации к моделям, предложенным на диаграмме.

У меня есть одно сомнение, может ли один внешний ключ (ВТОРАЯ МОДЕЛЬ) ссылаться на два первичных ключа (ВТОРОЙ МОДЕЛЬ УРОВЕНЬ 2 ПЕРВЫЙ И ВТОРОЙ МОДЕЛЬ УРОВЕНЬ ВТОРОЙ). Это было сделано, потому что пользователь должен выбрать, следует ли добавлять из SECOND MODEL LEVEL 2 FIRST TABLE или SECOND MODEL LEVEL 2 SECOND TABLE, вставляя значения в SECOND MODEL.

Если вы найдете это трудно понять, пожалуйста, оставьте комментарий, плохо вносите соответствующие изменения. И я был бы признателен за то, как запросить от FINAL LEVEL FIRST с BASE-MODEL доработать условие соединения.

  • 0
    Я почти уверен (хотя не на 100%), что MySQL позволяет полю быть внешним ключом для нескольких таблиц; однако, это не «или» ссылка; поле будет требовать, чтобы все ссылочные таблицы имели значение, используемое для него. Насколько я помню, это вообще считается плохой практикой; Необходимость подсказывает, что модель нуждается в изменении.
  • 0
    да, у меня было чувство, что это не сработает. Есть ли способ, которым я мог бы связать ФИНАЛЬНУЮ МОДЕЛЬ с БАЗОВОЙ МОДЕЛЬЮ, потому что она мне нужна для реализации поиска.
Показать ещё 4 комментария
Теги:
activerecord
associations

1 ответ

0
Лучший ответ

Вы можете использовать полиморфную ассоциацию для ссылки на одну таблицу ИЛИ другую, проверьте модель ниже в соответствии с опубликованным изображением:

class BaseModel
    has_many :first_models
    has_many :second_models
end

class FirstModel
    belgons_to :base_model
    has_one :level_two_first_model
end

class LevelTwoFirstModel
    belgons_to :first_model
end


class SecondModel
    belgons_to :base_model
    has_many :final_first_levels, as: :referenceable, :dependent => :destroy
    has_many :final_second_levels, as: :referenceable, :dependent => :destroy
end

class LevelOneSecondModel
    belongs_to :referenceable, polymorphic: true
    has_many :final_first_levels
end

class LevelTwoSecondModel
    belongs_to :referenceable, polymorphic: true
    has_many :final_first_levels
end


class FinalFirstLevel
     belongs_to :LevelOneSecondModel
end

class FinalSecondLevel
   belongs_to :LevelTwoSecondModel
end

referenceable используется как клей между родительской таблицей и другими полиморфными ассоциациями (LevelOneSecondModel OR LevelTwoSecondModel)

NB:
Не забудьте добавить нижнюю строку в файлы миграции из 2-х дочерних таблиц, используемых в полиморфной ассоциации.

t.references :referenceable, polymorphic: true, index: true

Ссылка:
http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

  • 0
    Могу ли я добавить полиморфную ассоциацию без изменения таблицы. @ Shiko
  • 0
    Нет необходимости менять таблицу, чтобы Rails мог понять, где находятся полиморфные ассоциации. Вы можете добавить 2 поля в свой файл миграции (referenceable_id, referenceable_type) или добавить строку, которую я показал вам в своем ответе. Я много использовал полиморфную ассоциацию, и она действительно мощная.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню