在rails中,我們可以通過提供的屬性欄訪問db列,但是我們可以更改嗎? 例如我有db名稱列可以實現類似的東西。我可以爲db列實現rails setter和getter屬性
def name
"sir" + name
end
我試過了,但是會導致堆棧溢出。有一種方法可以實現這一點。
更多的問題,名稱和self.name之間有任何區別。
在rails中,我們可以通過提供的屬性欄訪問db列,但是我們可以更改嗎? 例如我有db名稱列可以實現類似的東西。我可以爲db列實現rails setter和getter屬性
def name
"sir" + name
end
我試過了,但是會導致堆棧溢出。有一種方法可以實現這一點。
更多的問題,名稱和self.name之間有任何區別。
def name
"sir" + read_attribute(:name)
end
但是要避免這種做法。改用另外的getter/setter,也稱爲「虛擬屬性」。 欲瞭解更多信息,請閱讀此答案:decorating an attribute in rails
在你的情況下,也有一個奇怪的副作用。每次訪問屬性時,都會附加名稱。經過3個電話,你最終
"sir sir sir name"
事實上,你可以做
def name
n = read_attribute(:name)
if /^sir/.match(name)
n
else
"sir #{n}"
end
end
但是,嚴重的是,不這樣做。
我同意添加一個formatted_name方法是每個鏈接都要走的路。不要混淆屬性名稱,這是不值得的。 – MattMcKnight 2009-12-15 15:43:12
如果你意識到可能出現的併發症,但仍需要做到這一點,則:
def name
"sir" + self[:name]
end
自我[:名稱]和read_attributes [:名稱]的區別? – sarunw 2009-12-16 03:01:57
它只是簡短的一部分,請參閱http://api.rubyonrails.org/classes/ActiveRecord/Base.html上的「覆蓋默認訪問器」 – 2009-12-16 18:05:12
Re的確在StackOverflow中坍塌。 – Parziphal 2013-04-02 17:46:26