newbie:获取对象的属性值为#<activerecord :: relation> </activerecord :: relation>提供错误的未定义方法

时间:2012-02-03 14:30:20

标签: ruby-on-rails ruby-on-rails-3 activerecord object ruby-on-rails-3.1

我试图找出如何从对象中获取属性/属性。

locations.rb模型将具有属性:city

    @location = Location.where(:id => 1)

似乎要在我的控制器内找到但是如何从@location访问:city?

我尝试了所有组合并认为必须:

  • @ location.city
  • 将@ location.city需要打印城市值

但相反,我正在

undefined method `city' for #<ActiveRecord::Relation:0x007ff2d1506330>

任何人都可以澄清为什么这不起作用,我在这里想念的是什么?香港专业教育学院搜索了如何做到这一点的例子,并尝试了所有组合无济于事:( THX

3 个答案:

答案 0 :(得分:9)

Arel的where查询返回一组模型,即使只有一个结果。

Location.where(:id => 1)将有效地返回ActiveRecord::RelationLocation个对象的数组,即使该数组中只有一个来自此特定查询的结果。

要解决这个问题,要么

@location = Location.where(:id => 1).first
# or...
@location = Location.find(1)  # Finds by ID

答案 1 :(得分:1)

要从ID中检索对象,请使用

@location = Location.find(1)  # 1 is the id your looking for

阅读Active Record Query Interface上的指南,详细了解findwhere

答案 2 :(得分:1)

实际上,where返回的数组不是实例,而是find。由于city是您的模型具有实例方法city的属性,您无法将其用于数组。因此,请尝试@location = Location.find(1),然后@location.city