处理 Rails 中的多个状态
Handling multiple states in Rails
目前,我试图找出在我的 Rails 应用程序中处理状态的最佳方式。
我有一个模型 (Draws),可以在三个维度上处理多个状态。
- 活跃/不活跃
- 开始/运行/结束
- not_full/满
我需要处理五种状态:
- 不活跃和所有其他状态
- 活跃 & not_started & not_full
- 活跃 & 运行 & not_full
- 有效 & 运行 & 完整
- 有效且已结束且已满
有人可以为我指明有关使用宝石或阅读文章的正确方向,以了解有关如何处理 Rails 中的状态的更多信息吗?
这是将不同属性组合到状态的正确方法吗?
我是否必须分别定义每个转换?
我通常不合并 gem 来处理状态机,因为我通常必须微调通常超出 gem 功能的访问和转换。相反,我只是在哈希中定义我需要的状态机的所有内容,然后在模型中创建方法来处理定义。
class Draw
STATES = {
inactive: {
label: "Inactive",
transition: ->(draw) {
# code here that handles the transition to inactive state
}
from: [:started, :running, :ended],
guard: ->(draw) {
# code here that indicates that this state can be transitioned
into
!self.running?
}
}
started: {
# as above
}
}
STATES.keys.each do |s|
define_method "#{s}?" do
self.state == s.to_s
end
end
end
目前,我试图找出在我的 Rails 应用程序中处理状态的最佳方式。
我有一个模型 (Draws),可以在三个维度上处理多个状态。
- 活跃/不活跃
- 开始/运行/结束
- not_full/满
我需要处理五种状态:
- 不活跃和所有其他状态
- 活跃 & not_started & not_full
- 活跃 & 运行 & not_full
- 有效 & 运行 & 完整
- 有效且已结束且已满
有人可以为我指明有关使用宝石或阅读文章的正确方向,以了解有关如何处理 Rails 中的状态的更多信息吗? 这是将不同属性组合到状态的正确方法吗? 我是否必须分别定义每个转换?
我通常不合并 gem 来处理状态机,因为我通常必须微调通常超出 gem 功能的访问和转换。相反,我只是在哈希中定义我需要的状态机的所有内容,然后在模型中创建方法来处理定义。
class Draw
STATES = {
inactive: {
label: "Inactive",
transition: ->(draw) {
# code here that handles the transition to inactive state
}
from: [:started, :running, :ended],
guard: ->(draw) {
# code here that indicates that this state can be transitioned
into
!self.running?
}
}
started: {
# as above
}
}
STATES.keys.each do |s|
define_method "#{s}?" do
self.state == s.to_s
end
end
end