Правильна ли эта схема связи с базой данных? - PullRequest
0 голосов
/ 01 апреля 2019

Я сделал свой первый проект и столкнулся с проблемой, что не могу получить правильные значения category_information для конкретной категории соревнований через отношения. Поэтому я начал думать, что это может быть неправильная схема для этой задачи, поэтому мой вопрос - на самом деле это неправильно?

Текущая схема:

enter image description here

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Предполагая следующие отношения между моделями из вашего изображения.

class Competition < ApplicationRecord
  has_many :categories
  has_many :informations
  has_many :category_informations, through: :categories
end

class Category < ApplicationRecord
  belongs_to :competetion
  has_many :category_informations
  has_many :information, through: :category_informations
end

class CategoryInformation
  belongs_to :catagory
  belongs_to :information
end

class Information < ApplicationRecord
  belongs_to :competetion
  has_many :category_informations
  has_many :catagory, through: :category_information
end

Модель может связываться с one_to_many_to_many, используя: сквозную опцию

Объясняет связь, используемую для установки соединения «многие ко многим» с другой моделью.

вы можете получить category_informations от конкурса, как

Competition.first.category_informations

Это все для дела! Довольно хорошо, правда?

И вы тоже можете получить информацию из категории

Category.first.informations

На самом деле неправильной схемы не существует, просто существует неправильное описание ассоциации.

Вы можете больше использовать ассоциацию из docs в разделах 2.3 и 4.3,

0 голосов
/ 01 апреля 2019

Предполагая следующие отношения между таблицами,

Конкурс имеет множество категорий,

Конкурс имеет много информации,

Категория имеет много информации,

В категории есть_ множество соревнований,

Информация имеет много категорий

Вы можете использовать отношения has_many_through

class Category < ApplicationRecord
  has_many :category_competitions
  has_many :competitions, through: :category_competition
  has_many :category_informations
  has_many :informations, through: :category_informations
end

class Information < ApplicationRecord
  has_many :category_informations
  has_many :categories, through: :category_informations
end

 class Competition < ApplicationRecord
  has_many :category_competition
  has_many :categories, through: :category_competitions
end

class CategoryCompetition < ApplicationRecord
  belongs_to :category
  belongs_to :information
end

class CategoryInformation < ApplicationRecord
  belongs_to :category
  belongs_to :information
end

Таким образом, вы можете получить доступ к категориям конкретного соревнования с помощью @ Competition.

Эта статья может помочь вам лучше понять ассоциации https://www.sitepoint.com/master-many-to-many-associations-with-activerecord/

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