我关联了两个模型的问题和答案,问题模型有很多答案,所以我的查询是
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 >]
答案 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")