I'm struggling a bit with understanding default scopes and named scopes with my quiz application. I'm on rails 3.0.
I have a Question model that has_many UserResponse models.
Question has the question text and possible answer_ids. UserResponse ties user_id to a question_id and answer_id.
When I find() a Question to display to the user, I don't want to also pull every single UserResponse. By default, I'd like to only pull the UserResponse for the current user_id to see if they have already answered this question.
How can I create a scope on either the Question or UserResponse to accomplish this?
Not sure about the scope but I would start out just using the model relationships with something like this query perhaps:
(given question and user)
Then once working ok I would move onto scopes (if needed) and have:
a scope on the user model for response
a scope on the question model for responses
Note: I leaning more towards these 'join' approaches in the thought that they will only do 'inner' joins, i.e. only return rows where response records do exist. I am doing this as opposed to a syntax more like
lambda { where ('user_id = ?', User.id) } Then you could also chain them together. Something likeQuestion.responses_by_question(question).responses_by_user(user)`