此数据库关系架构正确吗?

时间:2019-04-01 11:54:51

标签: ruby-on-rails

我做了我的第一个项目,并遇到一个问题,即我无法通过关系获取特定比赛类别的正确category_information值。因此我开始认为这可能是此任务的错误模式,所以我的问题是-真的错误吗?

当前方案:

enter image description here

2 个答案:

答案 0 :(得分:0)

假定表之间具有以下关系,

比赛有很多类别,

比赛有很多信息,

一个类别有很多信息,

一个类别有很多竞争

信息has_many类别

您可以使用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.categories访问特定比赛的类别

本文可能对您更好地了解关联有所帮助 https://www.sitepoint.com/master-many-to-many-associations-with-activerecord/

答案 1 :(得分:0)

假设图像中的模型之间具有以下关系。

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

模型可以使用:through选项与one_to_many_to_many相关联

它说明了用于与另一个模型建立多对多连接的关联。

例如,您可以从竞争中获得category_information

Competition.first.category_informations

这一切都是为了做!还不错吧?

您也可以从类别中获取信息

Category.first.informations

实际上不存在错误的架构,只是存在一些错误的关联描述。

您可以从docs的2.3节和4.3节中获得更多使用关联的用法