Ruby on rails rails应用程序中的状态机和参数
我正在使用AASM为具有订阅行为的模型实现状态机。我希望状态机能够在更改状态时触发操作 目前,由于回调,如果日期不正确,我使用的更新操作将失败Ruby on rails rails应用程序中的状态机和参数,ruby-on-rails,state,Ruby On Rails,State,我正在使用AASM为具有订阅行为的模型实现状态机。我希望状态机能够在更改状态时触发操作 目前,由于回调,如果日期不正确,我使用的更新操作将失败 class Contrat validate :active_start_is_valid end 我想使用状态机,但我想象的所有实现在我看来都很混乱: -我使用这种方法创建类方法或服务对象: def start_subscription(date) date = validate_input_date(date) @contr
class Contrat
validate :active_start_is_valid
end
我想使用状态机,但我想象的所有实现在我看来都很混乱:
-我使用这种方法创建类方法或服务对象:
def start_subscription(date)
date = validate_input_date(date)
@contrat.start_date=date
@contrat.activate!
end
- 我在更新触发的before_save方法中执行此操作。这一个更复杂,因为我需要检查开始日期是否已更改,如果是,则在更改状态之前检查并更新日期李>
if @contrat.update_attributes
@contrat.activate!
end
我真的不喜欢这些。状态机文章,不管是不是rails,都不要提到事件的参数,还有其他一些模式我应该注意吗
我是否遗漏了一些明显的东西?这不是实现状态机的方式, 您应该使用创建模型,状态字段指示记录的状态,然后确定对象的状态并使用转换: 如果要指示初始状态,请使用:
state\u机器:状态,初始::已启动
...
结束
如果希望创建转换,请执行以下操作:
事件:开始执行
转换[:已创建]=>:已开始
结束
在过渡期间做工作:
在转换之后[:创建]=>:开始,执行::发送邮件
请在此处阅读更多信息: