2010-01-31 51 views
0

我在rails中有一個'Cost'模型。像下面這樣:模型構造函數可以在Rails中爲空嗎?

class Cost < ActiveRecord::Base 

    belongs_to :cost_type 
    has_many :cost_distributions 

    attr_accessor :epp 

    def initialize() 
    end 

然而,在我的測試中,當我嘗試用空構造函數創建新實例

cost = Cost.new 

我得到一個錯誤:錯誤的參數數目(0 1) 。爲什麼它忽略了我的空構造函數?

+0

除非有特別要添加的東西,否則不需要構造函數。你是否將一個散列傳遞給Cost.new?如果是這樣,你需要在你的構造函數中處理它。 – 2010-01-31 23:19:32

回答

2

您需要允許ActiveRecord執行自己的初始化,因爲您基本上覆蓋了該行爲。只要改變你的initialize這樣:

def initialize() 
super 
end 

但是,如果你不提供一個構造函數所有,Rails的,您可以創建一個沒有參數型號:

Cost.new 

如此,你的空initialize方法做還要別的嗎?如果不是,它甚至不需要。

+0

這並沒有擺脫錯誤。 – Daniel 2010-01-31 19:49:07

+0

如果你的'initialize'函數是空的,只包含'超級',那麼它應該工作。我在發佈前對本地進行了測試,以驗證解決方案,並且工作正常我相當確信你的代碼中有其他東西(你沒有發佈的部分)會導致錯誤。 – 2010-01-31 20:00:59

+0

我已經從我的Cost類中刪除了所有的方法,看起來它仍然期待帶有參數的初始化方法。 – Daniel 2010-01-31 22:16:31

1
def initialize(*args) 
    super 
end 

是祕密醬油。

0

通常,重寫ActiveRecord的initialize方法isn't a very good idea

如果你的initialize()沒有「沒有」,你不需要它。只要刪除它。

class Cost < ActiveRecord::Base 

    belongs_to :cost_type 
    has_many :cost_distributions 

    attr_accessor :epp 

end 

您仍然能夠調用Cost.new(右初始化方法將ActiveRecord本身提供,如果不重寫)。

相關問題