Rails3 activerecord连接不能返回连接表中的值?

时间:2012-08-30 11:11:09

标签: ruby-on-rails ruby-on-rails-3 activerecord

我关联了两个模型的问题和答案,问题模型有很多答案,所以我的查询是

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 >]

2 个答案:

答案 0 :(得分:2)

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

要获取实际的答案对象,您可以翻转查询并执行:

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)

因为该列应该隐藏在那个空的问题模型上,即使你无法在顶层看到它。

答案 1 :(得分:1)

[#<Question >, #<Question >]只是inspect的数组,每个元素都应该有answer方法。

----- EDITED

您还需要从问题表中选择字段

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