0

異なる役割を表す条件付きの 2 つのテーブル間に多数の多対多の関係があります。

class Course < ActiveRecord::Base
  ...
  has_many :course_mentors, :conditions => { :type_str => "mentor" }, :class_name => CourseUser
  has_many :mentors, :through => :course_mentors, :source => :user

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

関連付けの 1 つの内容を独自に取得するには、@course.enrollees、@course.mentors などを実行するだけです。ただし、登録者とメンターの両方を一緒に取得できると便利な場合があります。

私は多くの異なる関連付けを持っているため、単一の関連付けの組み合わせごとに追加の関連付けを作成することは現実的ではありません。いつでもできる

(@course.enrollees + @course.mentors).sort

ただし、これにより、データベースへの 2 つの要求が発生し、エントリが重複する可能性があります。

アソシエーションの関数も調査しましたmergeが、これは空のリレーションを返すだけです。

これを行うための最良のレールのような方法は何ですか?

4

1 に答える 1

4

Course モデル内で CourseUser に一般的な関連付けを追加するだけです。

has_many :course_users

次に、CourseUser モデル内にスコープを配置します。

scope :of_type, lambda {|types| where(:type_str => types)}

次に、次の方法でアクセスできます。

my_course = Course.first
my_course.course_users.of_type([:mentor, :enrollee])
于 2012-10-29T15:45:59.303 に答える