2

クイズ アプリケーションでデフォルト スコープと名前付きスコープを理解するのに少し苦労しています。私はRails 3.0を使用しています。

私はモデル化するQuestionモデルを持っていhas_many UserResponseます。

Questionご質問textありましたら可能answer_idsです。 およびにUserResponse結合user_idします。question_idanswer_id

ユーザーに表示するときにfind()QuestionすべてをプルしたくありませんUserResponse。デフォルトではUserResponse、現在の質問のみをプルして、user_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 に答える