2012-03-09 56 views
0

我剛剛學習rails,並注意到當我創建一個從ActiveRecord :: Base(即從我遷移的模型)繼承的對象時,對象中的實例變量在它們前面沒有@符號。爲什麼rails中的實例變量沒有@符號?

這是一個軌道的事情,還是我誤解了一些學習紅寶石時?

在此先感謝您的幫助。

回答

0

當你訪問對象的「實例變量」,實際上是通過軌又與真正的實例變量相互作用所定義的getter/setter方法進行交互。

這實際上非常有用,因爲它允許您在需要修改類中的變量行爲時覆蓋它們。

+0

謝謝,這有幫助。 – Nathan 2012-03-09 09:31:12

1

Rails不使用單個實例變量來存儲字段數據。相反,它會讓您設置正確的變量的某些方法可用。它有助於Rails在使用查找時更好地填充模型,並允許其他方法改進Rails的動態效果。

0

模型的列不是嚴格意義上的實例變量。

你可以訪問他們的getter/setter,但它們本質上是不同的:它們被認爲是持久的。

0

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 
+0

有趣。我不知道你可以通過直接傳遞值給setter方法來設置@bar,例如:bar = 2 – Nathan 2012-03-09 09:33:16

+0

@Nathan其實bar = 2不起作用:http://stackoverflow.com/questions/5963076/understand-self-for-attr-accessor-class-method – 2013-02-19 14:43:12

相關問題