我有一个模型Enrollment
,用于验证用户对每门课程的唯一性:
validates_uniqueness_of :user_id, :scope => :course_id
我在Enrollment
模型中创建了一个范围,我可以在课程中通过用户缩小课程范围:
scope :course, lambda { |course| where(:course_id => course.id) }
通过这样做,我可以打电话:
current_user.enrollments.course(@course)
然而,它然后让我循环结果,即使只有一个结果(每个用户的唯一课程)。这很好,但似乎应该有一种方法来简单地执行范围,然后只需访问记录而无需循环遍历一个结果。
有什么想法吗?我觉得我错过了什么。
答案 0 :(得分:1)
试试这个:
current_user.enrollments.course(@course).first
这将生成带有LIMIT 1
语句的SQL查询,并直接返回模型而不将其包装到数组中。
关于您的范围的小记录。由于您的Enrollment
模型具有course
关联(我假设为has_one :course
),您最好为您的范围指定与by_course
不同的名称,以防止与course
关联发生冲突允许您获取给定注册的课程。