Приложението ми има Question
модела, които has_many
UserResponse
модели.
Бих искал да получа последните 5 въпроса, на които конкретен User
е отговорил със свързаните UserResponse
обекти, филтрирани в полето user_id
.
Ето какво имам в момента:
Question.group("questions.id").
joins("inner join user_responses r on r.question_id = questions.id").
where("r.user_id = #{user_id}").
order("questions.id asc").limit(5)
Тази заявка ми връща това, което искам, но проблемът е, когато извадя Question
от масива и направя question.user_responses
, резултатът е всички отговори за този въпрос, а не само тези, които трябва да бъдат филтрирани от клаузата join/where по-горе.
Опитах да направя това:
Question.includes(:user_responses).group("questions.id").
joins("inner join user_responses r on r.question_id = questions.id").
where("r.user_id = #{user_id}").
order("questions.id asc").limit(5)
мислейки, че с нетърпение ще зареди всеки отговор... но изглежда не функционира по този начин.
Къде греша?
Ако има значение, причината, поради която се нуждая от нетърпеливо зареждане на всичко, е, че искам да взема масива и да извикам to_json върху него и да върна json от уеб услуга за моето мобилно приложение, така че имам нужда от цялата налична графика.