Ruby on rails 正在寻找正确验证记录状态的好方法
我有一个模型,这个模型的一列表示一个状态。它是数值,可以是1,2,3 我有两个顾虑: a) 根据业务逻辑,状态只能从1变为2,从2变为3。它不能从高数回到低数,也不能一步从1到3 b) 我不想把这些数字暴露给控制器(不喜欢神奇的数字四处飞舞) 我没有跟随Ruby on rails 正在寻找正确验证记录状态的好方法,ruby-on-rails,Ruby On Rails,我有一个模型,这个模型的一列表示一个状态。它是数值,可以是1,2,3 我有两个顾虑: a) 根据业务逻辑,状态只能从1变为2,从2变为3。它不能从高数回到低数,也不能一步从1到3 b) 我不想把这些数字暴露给控制器(不喜欢神奇的数字四处飞舞) 我没有跟随 我创建了stateX?,stateY?,stateZ?允许控制器检查当前状态。 这有助于我解决问题b) 我在其中创建了方法setStateX、setStateY、stateZ和raise,如果控制器没有进行不可接受的状态切换。这有助于我解决问
- 我创建了stateX?,stateY?,stateZ?允许控制器检查当前状态。 这有助于我解决问题b)
- 我在其中创建了方法setStateX、setStateY、stateZ和raise,如果控制器没有进行不可接受的状态切换。这有助于我解决问题a)和b)
有没有更好的方法在RoR中实现这一点?不确定这是否仍然是最好的方法(我的导轨有点生锈),但有一种叫做gem的东西,我想它会完全满足您的需要。这个怎么样:
class Something < ActiveRecord::Base
before_create :check_state
private
def check_state
if state_changed?
if state_was == 1 && state != 2
self.errors.add(:state, "some message")
elsif state_was == 2 && state != 3
self.errors.add(:state, "some message")
else
self.errors.add(:state, "some message")
end
end
end
end
class Something
谢谢。我不确定我是否会使用这个gem,但是使用状态机gem确实是一个好主意。是的,我有一段时间没有使用Rails了,所以我不知道最新的状态机gem是什么,但是acts\u as\u state\u machine
是我使用的,它工作得很好。