0

我試圖重載initialize方法。見下面在Rails中重寫初始化方法到模型中

class Restriction < ActiveRecord::Base 
    RESTRICTION_TYPES = { 
    less_than: "IND<X", 
    greater_than: "X<IND", 
    between: "X<IND<Y" 
    } 

    def initialize restriction_type_name 
    super 
    formula = RESTRICTION_TYPES[restriction_type_name] 
    end 

    private 
    def formula=f 
    self[:formula] = f 
    end 

end 

當我運行r = Restriction.new(:between)我得到異常:

NoMethodError: undefined method `stringify_keys' for :between:Symbol 

我在做什麼錯?

順便說一下,我這樣做是因爲formula屬性不能從外部接受。

+0

真的不是一個好主意。 ActiveRecord在初始化方法的幕後做了很多魔術。 – sevenseacat

+0

我讀到了。那麼,對我的問題最好的解決方案是什麼? –

回答

0

你不能覆蓋initialize,你無論如何不會工作(它會嘗試在initialize方法中設置一個名爲formula的局部變量)。但是,您可以將條件轉移到您的formula=二傳手,因此它讀取像:

def formula=(restriction_type_name) 
    self[:formula] = RESTRICTION_TYPES[restriction_type_name] 
end