如何在 AASM gem 中将参数传递给 new/init

How to pass a parameter to new/init in AASM gem

我正在尝试使用 AASM gem 制作一个有限状态机链。我想检查一个字符串是否唯一(数据库中不存在)。

我写了:

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传递参数?我想知道我该怎么做?

您在 aasm 块内定义了 initialize,只需将其移出该块:

require 'rubygems'
require 'aasm'

class Term
  include AASM

  def initialize(term)
    print term
  end

  aasm do
    # ...
  end
end