У меня есть модель с миссиями, пользователями и умами.
Остроумие принадлежит Миссиям и Пользователю.
Я хочу загрузить список всех миссий и хочу загрузить остроумие для конкретного пользователя.
Мне нужно сделать LEFT OUTER JOIN и добавить условие в соединение.
Вот что сейчас работает:
Mission.joins("LEFT OUTER JOIN wits ON wits.mission_id = missions.id AND wits.user_id = #{current_user.id}")
Тогда в моем списке я могу сделать mission.wits.first, чтобы получить остроумие, принадлежащее нужному пользователю.
Но это не очень дружелюбно к рельсам, и я должен проверить .loaded? атрибут, позволяющий не загружать все остроумие, если условие не выполняется.
Есть ли лучший способ, надеюсь, с помощью областей, чтобы сделать работу? Возможно, добавление нового виртуального атрибута в Mission, но я бы хотел избежать 20 обращений к базе данных в каждом списке.
ОБНОВЛЕНИЕ: В конце я хотел бы увидеть список миссий и для каждой миссии статус Wit для current_user. Я использую гем, называемый act_as_api, для создания представления моего списка в JSON, но я не могу получить доступ к переменной сеанса внутри модели, поэтому я смотрю на этот загружаемый материал, чтобы загрузить все, что мне нужно от контроллера.
Спасибо за вашу помощь