我做了我的第一个项目,并遇到一个问题,即我无法通过关系获取特定比赛类别的正确category_information值。因此我开始认为这可能是此任务的错误模式,所以我的问题是-真的错误吗?
当前方案:
答案 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节中获得更多使用关联的用法