2

我在使用我的测验应用程序理解默认范围和命名范围方面有些挣扎。我在rails 3.0上。

我有一个Question模型has_many UserResponse模型。

Question有问题text和可能answer_idsUserResponseuser_idaquestion_id和的关系answer_id

当我要向用户显示时,我不想同时拉动每find()一个. 默认情况下,我只想拉当前的,看看他们是否已经回答了这个问题。QuestionUserResponseUserResponseuser_id

如何在Question或上创建范围UserResponse来完成此操作?

4

1 回答 1

0

不确定范围,但我可能会开始使用模型关系和类似这样的查询:

(给定问题和用户)

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(question).responses_by_user(user)`

于 2011-11-20T18:48:31.720 回答