0

나는 initialize 메소드를 오버라이드하려고하고있다.모델을 레일즈에서 모델에 오버라이드

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

내가 잘못 뭐하는 거지 : 내가 r = Restriction.new(:between)를 실행하면 나는 예외가

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 

아래를 참조하십시오?

BTW 나는 formula 속성이 외부에서 액세스 할 수 없기 때문에이 작업을 수행하고 있습니다.

+0

정말 좋은 생각이 아닙니다. ActiveRecord는 initialize 메소드 주위에서 많은 마법을 수행합니다. – sevenseacat

+0

그것에 대해 읽었습니다. 그래서 내 문제에 대한 최선의 해결책은 무엇입니까? –

답변

0

initialize을 재정의 할 수 없으며 어쨌든 작동하지 않습니다 (초기화 방법에 formula이라는 로컬 변수를 설정하려고 시도합니다). 그러나 조건을 formula= 세터로 옮길 수 있으므로 다음과 같이 표시됩니다.

def formula=(restriction_type_name) 
    self[:formula] = RESTRICTION_TYPES[restriction_type_name] 
end 
관련 문제