2011-12-30 55 views
0

当观看在Active Record对象Rails的控制台,你回来是这样的:介绍ruby/rails对象? (前Foo.find(1))

=> #<Foo id: 1, name: "Far"> 

足见其型号名称和每个活动记录字段从数据库,而不显示相同的@instance变量,在这种情况下,它将是@ far =。

我怎样才能获得相同的表示了普通类对象,而不是返回,与定义为attr_accessor名称:

=> #<Foo:0x00000102fbf970 @name="Far"> 

为什么我想这是可以看到的值的原因而不是只看到attr_accessor(或attr_reader)方法变量。

是否有一种方法可以定义对象的输出是什么?

+1

'to_s'是默认的输出。 – 2011-12-30 16:42:14

回答

2

irb中的输出通过调用Object#inspect完成,后者又调用Object#to_s。您可以重写其中之一。我倾向于将检查视为调试视图,并将to_s视为标准用户显示。

class Foo 
    attr_accessor :bar, :value 

    def to_s 
    @value 
    end 

    def inspect 
    "bar: #{@bar}, value: #{@value}" 
    end 
end 

YMMV

+0

完美。我在班级名称中添加了检查项目,所以它按照我的意愿返回了对象。 – 2011-12-30 18:10:06