gpt4 book ai didi

ruby-on-rails - 状态模型设计模式

转载 作者:数据小太阳 更新时间:2023-10-29 07:58:06 27 4
gpt4 key购买 nike

我在为模型实现状态时遇到了问题。这可能是由于错误的设计。

有一个模型有一个状态。模型可以有多个实例,并且只有几个预定义状态(例如:创建、更新、检索等)。对于每个单独的状态,模型都有一些计算逻辑。例如。 model.cost() 对每个状态的计算方式不同。

我想让 ActiveRecord 在保存模型时自动设置正确的 model_status_id。我认为在理想情况下我可以做这样的事情:

model.status = StatusModel.retrieved

case status
when renewed
# ...
when retrieved
# ..
end

我想我需要将状态保存在数据库的模型行中,这就是我现在所拥有的:

ModelStatus < ActiveRecord::Base
has_many :models
Model < ActiveRecord::Base
belongs_to :model_status

然而,这在代码中给我带来了很多问题。有人对此有一些好的想法或模式吗?

最佳答案

您所描述的似乎是状态机的完美案例。

有许多 Ruby 状态机实现。您可以在 ruby-toolbox 看到一个相当有代表性的列表

定义状态机时,您可以定义多个Statestransitions。每个 transitions 都将您的模型从一种状态转移到另一种状态,同时执行一些代码。它的 DSL 通常非常好。

你的例子看起来像

model.retrieve!

这会将模式状态从原来的状态更改为已检索,或者如果当前状态未转换为已检索则抛出异常。

关于ruby-on-rails - 状态模型设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1327138/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com