2013-03-12 80 views
0

我正在試圖找到模型'new方法的來源。我試圖用source_location用ActiveRecord :: Base.new,並與Widget.new(其中Widget是一個模型),並做定義Model.new方法在哪裏?

find . -name *rb -exec grep -il "def new$" {} \; 

ActiveRecord的寶石目錄內,但沒有運氣。

+1

'new'方法是構造函數,在任何情況下你都應該在尋找'ActiveRecord :: Base'的'initialize'方法 – sergelerator 2013-03-12 23:41:16

回答

0

當Ruby對象通過.new實例化時,它通常運行對象的initialize方法。這是默認的Class定義:

1.9.3p327 :002 > ActiveRecord::Base.method(:new) 
=> #<Method: Class#new> 

如果你想創建一個Rails的模型的自定義初始化,簡單地定義一個initialize方法。請注意,有一些注意事項,因爲initialize不一定總是由ActiveRecord調用。相反,您最好添加一個after_initialize回調。

請參閱How to find where a method is defined at runtime?In Ruby, what's the relationship between 'new' and 'initialize'? How to return nil while initializing?瞭解關於查找方法的定義以及如何與newinitialize相關的更多幫助信息。

+0

謝謝!你能不能也請告訴我Model.save在哪裏或如何找到它? – highBandWidth 2013-03-13 00:00:58