2015-10-24 87 views
3

我不明白爲什麼,如果我寫:attr_accessor和類實例調試

class Building < ActiveRecord::Base 
    attr_accessor :has_child_custom, 'test' 
end 

,然後我嘗試用

ap @building 

調試它,我不看「has_child_custom」,但如果我輸入:

ap @building.public_methods.grep(/custom/) 

我看到了getter和setter方法。

爲什麼會發生這種情況,以及在哪裏可以看到我的自定義屬性?

回答

0

您的代碼創建訪問器方法來獲取和設置名爲@has_child_custom的實例變量。這個實例變量在你調用setter方法(或者創建它)之前不會真正存在。

你還創建存取方法testtest=

+0

但我該如何設置默認值? – Costa

+0

我會使用其中一個activerecord生命週期回調。 –

+0

Thx很多,如果需要打印模型或類的所有屬性和方法(如果需要獲取整個視圖),我應該怎麼做? – Costa

0

我會在ActiveRecord對象使用getter和setter函數必須非常小心。這些會覆蓋ActiveRecord爲您已經構建的方法,而且事情會變得非常混亂。

如果要初始化值或在ActiveRecord對象中設置默認值,最好的方法是使用ActiveRecord callbacks

通常,當我要初始化值,做我的東西這樣的效果:

def initialize(*args) 
    self.attribute_to_initialize = *something here* 
end 
+0

Thx很多,如果需要打印模型或類的所有屬性和方法,如果我需要獲取整個視圖,該怎麼做? – Costa