我剛剛學習rails,並注意到當我創建一個從ActiveRecord :: Base(即從我遷移的模型)繼承的對象時,對象中的實例變量在它們前面沒有@符號。爲什麼rails中的實例變量沒有@符號?
這是一個軌道的事情,還是我誤解了一些學習紅寶石時?
在此先感謝您的幫助。
我剛剛學習rails,並注意到當我創建一個從ActiveRecord :: Base(即從我遷移的模型)繼承的對象時,對象中的實例變量在它們前面沒有@符號。爲什麼rails中的實例變量沒有@符號?
這是一個軌道的事情,還是我誤解了一些學習紅寶石時?
在此先感謝您的幫助。
當你訪問對象的「實例變量」,實際上是通過軌又與真正的實例變量相互作用所定義的getter/setter方法進行交互。
這實際上非常有用,因爲它允許您在需要修改類中的變量行爲時覆蓋它們。
Rails不使用單個實例變量來存儲字段數據。相反,它會讓您設置正確的變量的某些方法可用。它有助於Rails在使用查找時更好地填充模型,並允許其他方法改進Rails的動態效果。
模型的列不是嚴格意義上的實例變量。
你可以訪問他們的getter/setter,但它們本質上是不同的:它們被認爲是持久的。
Rails爲所有模型屬性定義了getter/setter。
Getter/setter可以用attr_accessor
函數聲明。
class Foo attr_accessor :bar def do_something self.bar=2 @bar=2 # does the same as above end end
有趣。我不知道你可以通過直接傳遞值給setter方法來設置@bar,例如:bar = 2 – Nathan 2012-03-09 09:33:16
@Nathan其實bar = 2不起作用:http://stackoverflow.com/questions/5963076/understand-self-for-attr-accessor-class-method – 2013-02-19 14:43:12
謝謝,這有幫助。 – Nathan 2012-03-09 09:31:12