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 查询中返回正确答案,但为什么是 rails?我只有

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

2 回答 2

2

如果您选择使用 Question 模型,您将获得一个模仿 Question 模型的结果集。当您加入答案时-您将获得其中包含答案值的对象-但它们(在外部)仍然看起来像问题模型...因为这就是您在技术上要求的(称为“问题。 ...”)。

要获得实际的 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)

因为该列应该隐藏在那个空的 Question 模型上,即使您在顶层看不到它。

于 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 回答