2016-10-29 2 views
0

AASM gem으로 유한 상태 시스템 체인을 만들려고합니다. 문자열이 고유한지 (데이터베이스에 존재하지 않는지) 확인하고 싶습니다.AASM gem에서 new/init에 매개 변수를 전달하는 방법

require 'rubygems' 
require 'aasm' 

class Term 
    include AASM 

    aasm do 
    state :Beginning, :initial => true 
    state :CheckUniqueness 

    def initialize(term) 
     print term 
    end 

    event :UniquenessChecking do 
     print "Check uniqueness" 
     transitions :from => :Beginning, :to => :CheckUniqueness 
    end 

    end 

end 

term = Term.new("textstring") 
term.CheckUniqueness 

을하지만 Term.new("textstring")를 사용할 때이 오류 얻을 수 있기 때문에, 그것은, 제가 생각하는 매개 변수를 전달하는 것을 허용하지 않습니다 :

내가 쓴이 할 수

`initialize': wrong number of arguments (1 for 0) (ArgumentError) 
from try.rb:24:in `new' 
from try.rb:24:in `<main>' 

인가를 AASM에 init과 함께 매개 변수를 전달 하시겠습니까? 내가 어떻게 할 수 있는지 알고 싶니?

답변

1

당신은 aasm 블록의 내부 initialize 정의, 그냥 블록 밖으로 이동 :

require 'rubygems' 
require 'aasm' 

class Term 
    include AASM 

    def initialize(term) 
    print term 
    end 

    aasm do 
    # ... 
    end 
end 
+0

감사 작동,''aasm do'에서 term' 값을 액세서하는 것도 가능하다? 나는'self.term'을 시도했다. –

+0

'initialize'는 이제 마지막으로 실행됩니다. 왜냐하면 먼저 AASM 이벤트의 puts에 의해 인쇄 된 줄을 얻었고'initialize'에서 인쇄하기 때문입니다. 이벤트에서'term '을 어떻게 사용할 수 있습니까? –

+1

죄송합니다. 잘못된 중첩으로 도와 드릴 수 있었지만 AASM 내부에 대한 깊은 지식이 없습니다. 이 질문과 관련이없는 다른 문제가 코드에있는 경우 다른 질문을하는 것이 좋습니다. – spickermann