2011-12-30 26 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