2014-12-20 22 views
0

user.rb如何初始化after_initialize中的Active Record屬性?

after_initialize :init 

private 

    def init 
     self.name ||= 'Bob' 
    end 

IRB

irb> User.select('id') 
(Object doesn't support #inspect) 

如果我改變回調before_validation那麼上面的查詢工作。

理想情況下,我想能夠保持初始化在after_initialize。有沒有辦法做到這一點?

我寧願不必override the initialize method

+0

你有沒有嘗試過做只是例如,'User.first'?我不知道'select'是否實際(或完全)實例化了一個AR :: Base對象...... –

+0

你究竟在做什麼,讓你覺得'after_initialize'是一個解決方案? –

回答

-1

張貼的代碼試圖設置每個用戶實例化時間(比如User.new,User.first,User.all)名稱

如果您打算保存記錄與name = "Bob"name是零,請在before_validationafter_validation

如果你打算只返回「鮑勃」當name是零,這樣做在吸氣:

def name 
    @name ||= "Bob" 
    end 
+0

爲什麼是反面投票?我想知道我是否誤解了這個問題,我的回答是錯誤的,我說的是錯誤的還是違反規則或? – roob

+0

感謝您的回答。我還沒有確定你的答案是否適合我的情況。無論如何,我並沒有冷靜下來 - 而且當人們在評論中沒有寫下他們的推理時,他們倒退了,我討厭它。 – user664833