我要做的是为Project
提出模型,其中一次只能激活一个项目。所以我想为projects
创建一个表,为status
创建另一个表。
如何确保在给定时间内只有一个项目处于活动状态?我查看了validates_uniqueness_of
,但是如果那是我的解决方案,我很困惑,因为我确实希望能够覆盖当前状态,尽管事实上已经启用了一个项目。
答案 0 :(得分:0)
您的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
。