Rails查看ActiveRecord关系的问题

时间:2015-09-27 13:03:13

标签: ruby-on-rails ruby ruby-on-rails-4 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>

出了什么问题?

3 个答案:

答案 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) %> 

如果记录存在,它将返回单个对象。