轨道中3个模型之间的关系(教师,学科,学生)

时间:2016-06-04 06:49:44

标签: ruby-on-rails ruby ruby-on-rails-4

我需要帮助来构建rails中3个模型之间的关系 老师,学科和学生

我不知道是否有可能,但我希望如此

学生可以在多个科目中,并且他属于一名教师

主题可以有多个学生,它属于教师

教师可以添加科目并访问所有学生

2 个答案:

答案 0 :(得分:1)

您想学习Ruby on Rails关联(http://guides.rubyonrails.org/association_basics.html)。

有:

  1. 的has_many
  2. HAS_ONE
  3. 现在,在您的特定情况下,您需要制作:

    class Subject < ActiveRecord::Base
      has_many :students
      belongs_to :teacher
    end
    
    class Student < ActiveRecord::Base
      belongs_to :teacher
      has_many :subjects
    end
    
    class Teacher < ActiveRecord::Base
      has_many :students
      has_many :subjects
    end
    

    您还需要创建某些迁移

    您的迁移也需要引用! http://edgeguides.rubyonrails.org/active_record_migrations.html

    有良好的rails g迁移方法允许您添加对现有模型的引用:

    $ bin/rails generate migration AddStudentRefToSubjects student:references
    

    返回什么:

    class AddStudentRefToSubjects < ActiveRecord::Migration
      def change
        add_reference :subjects, :student, index: true, foreign_key: true
      end
    end
    

    最后,您可以通过(示例)

    访问您的实例
    Subject.last.students // returns all students for last subject in your DB
    Teacher.last.students // returns all students for last teacher in your DB
    Subject.last.teacher // returns teacher instance of last subject
    

答案 1 :(得分:0)

仅使用这三种模型无法创建所需的关系。由于你在主题和学生之间有多对多的关系,你需要创建一个更多的模型,并且创建有很多通过学生和主题之间的关联,比如AttendingSubject,它应该属于:student和belongs_to:subject。 class AttendingSubject < ActiveRecord::Base belongs_to :student belongs_to :subject end 那么对于学生你需要 class Student < ActiveRecord::Base has_many :subjects, through: :attending_subjects belongs_to :teacher 而对于主题 class Subject < ActiveRecord::Base has_many :subjects, through: :attending_subjects belongs_to :teacher end 而对于老师 class Teacher < ActiveRecord::Base has_many :subjects has_many :students end 这里有更多关于通过关联有很多。 http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association