2016-10-29 4 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

関連する問題