我正在尝试做的是提出模型Project
,一次只能有一个项目处于活动状态。所以我正在考虑projects
为status
.
如何确保在给定时间只有一个项目处于活动状态?我调查过,validates_uniqueness_of
但如果这对我来说是解决方案,我有点困惑,因为我确实希望能够覆盖当前状态,尽管事实上如果一个项目已经启用。
我正在尝试做的是提出模型Project
,一次只能有一个项目处于活动状态。所以我正在考虑projects
为status
.
如何确保在给定时间只有一个项目处于活动状态?我调查过,validates_uniqueness_of
但如果这对我来说是解决方案,我有点困惑,因为我确实希望能够覆盖当前状态,尽管事实上如果一个项目已经启用。
你Project
应该有类似:active
属性的东西。然后,您可以在Project
模型上添加这样的验证
validate :ensure_only_one_active_project
def ensure_only_one_active_project
active_project = Project.where(active: true).first
errors.add(:active, "Another project is already active. Only one project can be active at a time") unless active_project.nil? || active_project.id == self.id
end
现在,如果一个Project
已经是活动的,并且有另一个(当前不活动) Project
@project
,并尝试做
@project.active = true
@project.valid? # this will return false
@project.errors
将包含:active
具有上述错误的属性的哈希,因为
Project
已经激活Project
我们正在保存的当前项目。