Использование области для доступа к уникальной отдельной записи без цикла? - PullRequest
0 голосов
/ 24 декабря 2011

У меня есть модель 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 Ответ

1 голос
/ 24 декабря 2011

Попробуйте это:

current_user.enrollments.course(@course).first

Это сгенерирует SQL-запрос с оператором LIMIT 1 и вернет модель напрямую, не помещая ее в массив.

Небольшая заметка о вашем объеме. Поскольку ваша модель Enrollment имеет ассоциацию course (я полагаю, has_one :course), вам лучше присвоить своей области другое имя, например by_course, чтобы предотвратить столкновение с ассоциацией course, которая позволит вам выбрать курс для данной регистрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...