2015-09-27 92 views
0

我有這個疑問:Rails視圖問題與ActiveRecord的關係

<% @answer = Answer.where(:question_id => @question.id, :correct => 1) %> 

結果是:

#<ActiveRecord::Relation [#<Answer id: 535, body: "d", notice: "", correct: true, question_id: 50, created_at: "2015-09-26 10:09:10", updated_at: "2015-09-26 10:09:10">]> 

當我想這樣做:

<%= @answer.body %> 

我得到這個錯誤:

undefined method `body' for <Answer::ActiveRecord_Relation:0x0000000e99b7c8> 

怎麼回事?

回答

1

A where查詢返回一個對象集合ActiveRecord_Relation

爲了使該代碼正常工作,您必須附加.last.first.find(id)以返回單個對象。

<% @answer = Answer.where(:question_id => @question.id, :correct => 1).last %> 
+0

謝謝。我試着用.first。 這種情況下的區別是什麼:第一個dosn't工作? – Felix

+0

如果你沒有收到'@ answer.body'的響應,這應該沒有什麼區別,這可能意味着':body'屬性是空的。試試'rails console'中的'where'查詢,這樣你就可以看到完整的響應。 – miler350

+0

神祕... ...第一次沒有工作... – Felix

2

undefined method `body' for Answer::ActiveRecord_Relation:0x0000000e99b7c8

正如你看到@answer返回ActiveRecord::Relation這是記錄/對象的集合,這樣你就不能簡單地使用@answer.body

解決方案:

可以遍歷@answer

<% @answer.each do |answer| %> 
    <%= answer.body %> 
<% end %> 
+1

或者,如果您想要一條記錄,則可以使用'find_by'而不是'where'。 – ufuoma

0

where返回ActiveRecord::Relation(看起來像一個數組,但沒有),這是模型對象的集合,所以@答案是一個集合,你不能用它直接調用body屬性。

你可以這樣做:

<% @answer = Answer.where(:question_id => @question.id, :correct => 1).first %> 

或:

<% @answer = Answer.find_by_question_id_and_correct(@question.id, 1) %> 

如果記錄存在,它會返回一個對象。