2

2 つのモデルの質問と回答を関連付けました. 質問モデルには多くの回答があります. したがって, 私のクエリは

Question.joins("inner join answers on questions.correct_answer_id = answers.id").select("answers.answer")

SELECT answers.answer FROM `questions` inner join answers on questions.correct_answer_id = answers.id

mysqlクエリでは正しい答えが返されますが、なぜレールですか? 私だけが得た

[#<Question >, #<Question >]
4

2 に答える 2

2

質問モデルの使用を選択すると、質問モデルを模倣した結果セットが得られます。答えに参加すると、内部に答えの値を含むオブジェクトが得られますが、(外側では) 質問モデルのように見えます...それは技術的に要求したものだからです (「質問. ...")。

実際の Answer オブジェクトを取得するには、クエリを反転して次のようにします。

Answer.joins("inner join questions on questions.correct_answer_id = answers.id").select("answers.answer")

(必要に応じて調整 - このコードはテストされていません)。

または、sumiskyi が提案したようにして、実際の列に呼び出しを追加することもできます。

 Question.joins("inner join answers on questions.correct_answer_id = answers.id").select("answers.answer").map(&:answer)

その列は、トップレベルで見えなくても、その空の質問モデルに隠れているはずだからです。

于 2012-08-31T07:11:49.603 に答える
1

[#<Question >, #<Question >]は単なる配列でありinspect、各要素にはanswerメソッドが必要です。

-----編集済み

質問テーブルからフィールドを選択する必要もあります

Question.joins("inner join answers on questions.correct_answer_id = answers.id").
  select("questions.*, answers.answer")
于 2012-08-30T11:24:26.687 に答える