我需要帮助来构建rails中3个模型之间的关系 老师,学科和学生
我不知道是否有可能,但我希望如此
学生可以在多个科目中,并且他属于一名教师
主题可以有多个学生,它属于教师
教师可以添加科目并访问所有学生
答案 0 :(得分:1)
您想学习Ruby on Rails关联(http://guides.rubyonrails.org/association_basics.html)。
有:
现在,在您的特定情况下,您需要制作:
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