我有这个查询:
<% @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>
出了什么问题?
答案 0 :(得分:2)
未定义的方法`body'for 答:: ActiveRecord_Relation:0x0000000e99b7c8
如您所见@answer
会返回ActiveRecord::Relation
,这是一组记录/对象,因此您不能简单地使用@answer.body
。
<强> 解决方案: 强>
您可以迭代@answer
<% @answer.each do |answer| %>
<%= answer.body %>
<% end %>
答案 1 :(得分:1)
where
查询返回ActiveRecord_Relation
,它是一组对象。
为了使该代码有效,您必须附加.last
或.first
或.find(id)
才能返回单个对象。
<% @answer = Answer.where(:question_id => @question.id, :correct => 1).last %>
答案 2 :(得分:0)
body
返回一个https://serverfault.com/questions/494669/setting-up-a-reverse-proxy-to-cache-images(看起来像一个数组,但不是),它是模型对象的集合,所以@answer是一个集合,你不能用它来调用{{ 1}}直接属性。
你可以这样做:
<% @answer = Answer.where(:question_id => @question.id, :correct => 1).first %>
或:
<% @answer = Answer.find_by_question_id_and_correct(@question.id, 1) %>
如果记录存在,它将返回单个对象。