2016-10-29 6 views
0

Я пытаюсь создать цепочку конечных автоматов с драгоценным камнем AASM. Я хочу проверить, уникальна ли строка (не существует в базе данных).Как передать параметр new/init в драгоценный камень AASM

я писал:

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>' 

Можно ли передать параметр с помощью init в AASM? Я хотел бы знать, как я могу это сделать?

ответ

1

Вы определили initialize внутри из aasm блока, просто переместить его из этого блока:

require 'rubygems' 
require 'aasm' 

class Term 
    include AASM 

    def initialize(term) 
    print term 
    end 

    aasm do 
    # ... 
    end 
end 
+0

Благодаря работает, это также можно Acces 'term' значение в' AASM do'? Я попробовал 'self.term'. –

+0

Я думаю, что 'initialize' теперь запущен как последний, потому что я сначала получаю печатные строки, помещаемые из событий AASM, а затем печать из' initialize'. Как я могу использовать 'term' в событиях? –

+1

Извините, я был в состоянии помочь вам с вашим недействительным вложением, но у меня нет глубоких знаний в области AASM. Я предлагаю задать другой вопрос, если у вас есть другие проблемы с кодом, которые не связаны с этим вопросом. – spickermann