2

私は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

上記の唯一の問題は、 に同時に 2 つの外部キーを渡すことができないことだと思いますがteacher_student_link、よくわかりません。回避策として、私のモデルにはまだ teacher_id がなくstudent.userteacher. 誰でもこの問題で私を助けることができますか?

更新: 以下の解決策では、新しいリンクを作成するにはどうすればよいですか?

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

このようにすると、生徒と教師は正しくペアになりますか? userTeacherStudentLink には、student、があり、リンクの作成方法がわからないため、少し混乱していteacherます。

4

1 に答える 1

3

teacher_student_links 関連付けを 2 つの関連付けに分ける必要があります。

  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 アソシエーションに外部キーを追加する必要がある場合もあります

アップデート:

リンクの作成に関する 2 番目の質問については、次のように動作するはずです。

@user = User.find(params[:id])
@user.students << current_user

TeacherStudentLink は自動的に作成され、すべてが正しく設定されていれば関連付けが機能するはずです。

于 2013-01-18T03:46:00.497 に答える