Лучший способ определить отношение has_many, когда find () использует родительский объект - PullRequest
2 голосов
/ 20 ноября 2011

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

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

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

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

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

1 Ответ

0 голосов
/ 20 ноября 2011

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

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

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 (пользователь) `

...