我正在研究User
模型,每个用户都应该能够同时拥有学生和教师。但是,由于学生和老师都属于User
,我的模型有点复杂。
这就是我现在正在尝试的。
Teacher_student_link
class TeacherStudentLink < ActiveRecord::Base
attr_accessible :student_id, :teacher_id, :user_id
belongs_to :user
belongs_to :teacher, :class_name => "User"
belongs_to :student, :class_name => "User"
end
用户
class User < ActiveRecord::Base
has_many :teacher_student_links, :foreign_key => { :student_id, :teacher_id }, :dependent => :destroy
has_many :students, :through => :teacher_student_links
has_many :teachers, :through => :teacher_student_links
end
如果一切按预期工作,我应该能够做到
@user = User.new
@user.students
@user.teachers
@user.student.teachers
我认为上面唯一的问题是我不能同时给teacher_student_link
两个外键,但我不确定。作为解决方法,我的模型中还没有teacher_id,而只是student.user
来调用teacher
。任何人都可以帮我解决这个问题吗?
更新 通过以下解决方案,我应该如何创建新链接?
def become_student
@user = user.find(params[:id])
@student_link = @user.student_links.create(:student_id => current_user.id)
@teacher_link = current_user.teacher_links.create(:teacher_id => @user.id)
end
如果我这样做,学生和老师是否配对正确?
我很困惑,因为在TeacherStudentLink中,有user
,student
,teacher
,我不知道如何处理创建链接。
答案 0 :(得分:3)
您应该将teacher_student_links关联分为两个关联:
has_many :teacher_links, :foreign_key => :student_id, :dependent => :destroy, :class_name => "TeacherStudentLink"
has_many :student_links, :foreign_key => :teacher_id, :dependent => :destroy, :class_name => "TeacherStudentLink"
has_many :students, :through => :student_links
has_many :teachers, :through => :teacher_links
您可能还需要将外键添加到TeacherStudentLink上的belongs_to关联
<强>更新强>
关于创建链接的第二个问题,以下内容应该有效:
@user = User.find(params[:id])
@user.students << current_user
应该自动创建TeacherStudentLink,如果一切设置正确,您的关联应该有效。