仅当给定参数(代码)与对象属性(临时代码)匹配时,我才需要 state_machine 事件来提供转换。
当我测试这段代码时:
class User < ActiveRecord::Base
def initialize
@temporary_code = 'right'
end
state_machine :initial => :inactive do
event :activate! do
transition :inactive => :active, :if => lambda{ |code| code == @temporary_code }
end
state :inactive do
def active?
false
end
end
state :active do
def active?
true
end
end
end
end
但无论给出什么代码,它都不会进行转换。下面的 Rspec 测试返回错误:
describe "activation" do
let(:user) { User.create }
before { user.activate!('right') }
specify { user.should be_active }
end
它有什么问题?