1

結合テーブル CourseUser を使用した User モデルとの関連付けにより、多くのコースモデルがあります。結合テーブルには、ユーザーが引き受ける役割を指定する属性 type_str があります。各コース、ユーザー ペアの結合テーブルに 1 つのレコードのみが存在することを確認するための検証を追加しました。問題は、もちろん検証が失敗する新しいレコードを追加するのではなく、このレコードが既に存在する場合に更新することです。

ユーザークラス:

class User < ActiveRecord::Base

...
  has_many :courses_enrolled_on, :through => :course_enrollees, :source => :course, :conditions => { :course_users => { :type_str => "enrollee" } }

  has_many :course_users
  has_many :courses, :through => :course_users, :source => :course, :readonly => true 
end

コースクラス

class Course < ActiveRecord::Base

  has_many :course_enrollees, :conditions => { :type_str => "enrollee" }, :class_name => CourseUser
  has_many :enrollees, :through => :course_enrollees, :source => :user

  has_many :course_users
  has_many :users, :through => :course_users, :source => :user, :readonly => true
end

コースクラス:

class CourseUser < ActiveRecord::Base
  belongs_to :course
  belongs_to :user

   validates_uniqueness_of :course_id, :scope => :user_id
end
4

0 に答える 0