使用范围访问唯一的单个记录而不必循环?

时间:2011-12-24 18:27:49

标签: ruby-on-rails-3 activerecord

我有一个模型Enrollment,用于验证用户对每门课程的唯一性:

validates_uniqueness_of :user_id, :scope => :course_id

我在Enrollment模型中创建了一个范围,我可以在课程中通过用户缩小课程范围:

scope :course, lambda { |course| where(:course_id => course.id) }   

通过这样做,我可以打电话:

current_user.enrollments.course(@course)

然而,它然后让我循环结果,即使只有一个结果(每个用户的唯一课程)。这很好,但似乎应该有一种方法来简单地执行范围,然后只需访问记录而无需循环遍历一个结果。

有什么想法吗?我觉得我错过了什么。

1 个答案:

答案 0 :(得分:1)

试试这个:

current_user.enrollments.course(@course).first

这将生成带有LIMIT 1语句的SQL查询,并直接返回模型而不将其包装到数组中。

关于您的范围的小记录。由于您的Enrollment模型具有course关联(我假设为has_one :course),您最好为您的范围指定与by_course不同的名称,以防止与course关联发生冲突允许您获取给定注册的课程。