我在两个表之间有许多关系,条件代表不同的角色。
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
要自行检索其中一个关联的内容,我可以简单地执行@ course.enrollees,@ course.mentors等。但有时候,能够同时获得两个注册人和导师都会很方便。
我有许多不同的关联,这使得为单个关联的每个组合创建额外的关联变得不切实际。一个人总能做到
(@course.enrollees + @course.mentors).sort
然而,这会导致对数据库的两个请求以及可能重复的条目。
我还调查了关联的merge
函数,但这只返回一个空关系。
这样做的最佳方式是什么?
答案 0 :(得分:4)
您只需在课程模型中添加一个与CourseUser的常规关联:
has_many :course_users
然后在ScopeUser模型中放置一个范围:
scope :of_type, lambda {|types| where(:type_str => types)}
然后您可以通过以下方式访问它:
my_course = Course.first
my_course.course_users.of_type([:mentor, :enrollee])