Rails多对多协会和has_many,通过:
问题描述:
我在一周前创建了我的模型,但我不知道很多我现在知道的事情,所以现在是时候从头开始创建它。Rails多对多协会和has_many,通过:
我要实现什么目标是创建:
,可以有很多的优惠发售模式,可以有许多实验室
- 实验室模型。
#MIGRATION FILES BELOW: class CreateLabs < ActiveRecord::Migration[5.0] def change create_table :labs do |t| t.string :name ... t.timestamps end end end class CreateOffers < ActiveRecord::Migration[5.0] def change create_table :offers do |t| t.string :name ... t.timestamps end end end # Join table: class CreateLabChain < ActiveRecord::Migration[5.0] def change create_table :lab_chain do |t| t.references :lab, foreign_key: true t.references :offer, foreign_key: true t.timestamps end end end
这里是模型文件什么样子:
class Lab < ApplicationRecord
has_many :offers, through: :lab_chain
has_many :lab_chains
end
class Offer < ApplicationRecord
has_many :labs, through: :lab_chain
has_many :lab_chains
end
class LabChain < ApplicationRecord
belongs_to :lab
belongs_to :offer
end
我只是想知道,如果我正确地写了这一切,因为我不知道所有这些我都看过教程并阅读。
奖励的问题是,如果我想要我的优惠有很多部分,节有很多offer_items?我是不是应该加上:
提供的:
has_many :sections
has_many :offer_items, through: :section
再到科:
has_many :offer_items
belongs_to :offer
和以OfferItem:
belongs_to :section
? 正如我之前提到的,我自愿作为一个为我们学校项目制作网站的人,因为我是唯一一个与代码(不同语言)有关的人。这比我想象的要难。
编辑
我怎么会还正确地添加自第加盟,让一个部分可以有一个小节等等?
自联接addded到添加到迁移文件
t.references :parent_section, foreign_key: "section_id"
答
科模型
has_many :child_sections, class_name: "Section", foreign_key: "section_id"
belongs_to :parent_section, class_name: "Section"
这看起来像一个正确的多对多关联。你秒也看起来正确。另外,它有助于绘制任何超过3个表的数据库的图表,如果您计划将其作为一项工作来完成,那么完全掌握整个表关系非常值得,因为它是写作的核心好的模型代码。
感谢您的建议!如果我想将自连接添加到节模型会怎么样?那么一个部分可以有子部分?编辑代码包括 – Ancinek
@Ancinek你不需要一个子部分模型/表,特别是如果你想做自我加入。你的分区表应该有一个parent_id列。当一个类别的parent_id值指向另一个类别记录时,该类别就是一个子类别。带有空parent_id的类别是*类别。所以你可以有一个代码,比如has_many:sub_section,class_name:“Section”,foreign_key::parent_id,那么你应该创建一个迁移来将parent_id列添加到sections表中。 –