2016-09-16 128 views
0

我在一周前创建了我的模型,但我不知道很多我现在知道的事情,所以现在是时候从头开始创建它。Rails多对多协会和has_many,通过:

我要实现什么目标是创建:

,可以有很多的优惠
  • 发售模式,可以有许多实验室

    1. 实验室模型。

      #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" 
    
  • 回答

    1

    科模型

    has_many :child_sections, class_name: "Section", foreign_key: "section_id" 
    belongs_to :parent_section, class_name: "Section" 
    

    这看起来像一个正确的多对多关联。你秒也看起来正确。另外,它有助于绘制任何超过3个表的数据库的图表,如果您计划将其作为一项工作来完成,那么完全掌握整个表关系非常值得,因为它是写作的核心好的模型代码。

    +0

    感谢您的建议!如果我想将自连接添加到节模型会怎么样?那么一个部分可以有子部分?编辑代码包括 – Ancinek

    +1

    @Ancinek你不需要一个子部分模型/表,特别是如果你想做自我加入。你的分区表应该有一个parent_id列。当一个类别的parent_id值指向另一个类别记录时,该类别就是一个子类别。带有空parent_id的类别是顶级类别。所以你可以有一个代码,比如has_many:sub_section,class_name:“Section”,foreign_key::parent_id,那么你应该创建一个迁移来将parent_id列添加到sections表中。 –