通过以下方式对多个协会和多个协会进行Rails:

时间:2016-09-16 14:45:10

标签: ruby-on-rails

我一周前创建了我的模型,但我现在还不知道很多我知道的东西,所以是时候从头开始创建它了。

我想要完成的是创建:

  1. 可提供多种优惠的实验室模型
  2. 提供可以拥有多个实验室的模型。

    #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
    
  3. 以下是模型文件的样子:

    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
    

    然后到Section:

    has_many :offer_items
    belongs_to :offer
    

    和to OfferItem:

    belongs_to :section
    

    ? 正如我之前提到的,我自愿作为一个为我们学校项目建立网站的人,因为我是唯一一个与代码(不同语言)有关的人。它比我想象的要难。

    修改

    我如何在Section中正确添加自联接,这样一个部分可以有一个子部分等等?

    自我联接添加到章节模型

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

    已添加到迁移文件

    t.references :parent_section, foreign_key: "section_id"
    

1 个答案:

答案 0 :(得分:1)

这看起来像是一个正确的多对多关联。你的第二个看起来也是正确的。

顺便说一句,它有助于绘制一个包含3个以上表格的数据库图表,如果你打算将其作为一个工作,那么真正完全掌握整个表格关系是值得的,因为它是写好的核心型号代码。