2012-08-30 104 views
2

我有關聯的兩個型號問題和答案,問題模型有很多答案,所以我的查詢Rails3 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查詢返回

正確的答案,但爲什麼軌道?我只

[#<Question >, #<Question >] 
+0

Question.joins(「對答案進行內部加入答案.corerect_answer_id = answers.id」)。select(「answers.answer」) .map(&:answer) – sumskyi

回答

2

,您將得到設置模擬題模式的結果。當你加入答案 - 你會得到包含答案值的對象 - 但它們仍然看起來(在外面)像問題模型...因爲這是你技術上要求的(被稱爲「問題」。 ......「)。

獲得實際的答案對象,你可以翻轉過來,查詢並做到:

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

(根據需要調整 - 此代碼未測試)。

,或者你可以做的sumiskyi建議,並添加通話TOT H實際柱:

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

因爲該列應該對空問模型有隱藏,即使你看不到它在頂層。

+0

Answer.joins(:question).select(」questions。*「)。find(100)It Only returns the常見的領域,如#<解答ID:25,created_at: 「2010-08-20 18時36分49秒」,的updated_at: 「2011-09-06 9時50分49秒」> –

+0

@PonnuSamyK你所說的「平均共同領域「?以及這與你想要的有什麼不同? –

+1

「這兩個表共享的列」(如「created_at」)都是你回來的。它*應該*把你在「select」語句中放置的所有項目按照你列出的順序返回爲所有這些字段的數組(只有那些) - 但事實並非如此。這種行爲是錯誤的 - 特別是如果您明確地將AR轉換爲數組。但非常感謝您解釋如何在第二個示例中使用.map()來獲取請求的列(使用select())。 – JosephK

1

[#<Question >, #<Question >]inspect只是數組,每個元素應該有一個answer方法。

----- EDITED

你,如果你選擇使用問題的模式還需要選擇字段從問表

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

no no that is a empty object ....我需要這樣的#<問題編號:12530,subject_id:12,chapter_id:138,答案:138,問: 「

光合根在...........

發現...」>這是我的問題對象... –

+0

剛編輯我的答案,選擇(「問題。*,answers.answer」) – sumskyi

+0

喜還是現在,我沒有得到答案記錄 >> Question.joins(「內部連接的問題的答案。 correct_answer_id = answers.id 「)選擇(」 *的問題,answers.answer「)第一 #<問ID:3,subject_id:4,chapter_id: 80,問題: 「通過消除形成微分方程...」> 問題負載(0.4ms)SELECT *的問題,answers.answer FROM'questions'上questions.correct_answer_id = answers.id LIMIT 1 但內部連接的答案。這是工作在mysql中prombt –