Лучший способ определить отношение has_many при поиске () родительского объекта

Я немного борюсь с пониманием областей по умолчанию и именованных областей с моим приложением-викториной. Я на рельсах 3.0.

У меня есть Question модель, которая has_many UserResponse моделирует.

У Question есть вопрос text и, возможно, answer_ids. UserResponse связывает user_id с question_id и answer_id.

Когда я find() вывожу Question для отображения пользователю, я не хочу также вытягивать каждый UserResponse. По умолчанию я хотел бы получить только UserResponse для текущего user_id, чтобы узнать, ответили ли они уже на этот вопрос.

Как я могу создать область на Question или UserResponse для достижения этой цели?


person 1locoburro    schedule 20.11.2011    source источник


Ответы (1)


Не уверен насчет области, но я бы начал с использования отношений модели, возможно, с чем-то вроде этого запроса:

(данный вопрос и пользователь)

responses = question(question).user_responses(user)

Затем, когда все будет хорошо, я перейду к областям (при необходимости) и:

область пользовательской модели для ответа

(Rails3 syntax)  scope :responses_by_user,  labmda { join(:responses) }

область действия модели вопроса для ответов

(Rails3 syntax)  scope :responses_by_question,  labmda { join(:responses) }  

Примечание. Я больше склоняюсь к этим подходам «объединения», полагая, что они будут выполнять только «внутренние» соединения, т. е. возвращать только строки, в которых существуют записи ответов. Я делаю это в отличие от синтаксиса, больше похожего на lambda { where ('user_id = ?', User.id) } Then you could also chain them together. Something like Question.responses_by_question(вопрос).responses_by_user(user)`

person Michael Durrant    schedule 20.11.2011