0

我正在尝试做的是提出模型Project,一次只能有一个项目处于活动状态。所以我正在考虑projectsstatus.

如何确保在给定时间只有一个项目处于活动状态?我调查过,validates_uniqueness_of 但如果这对我来说是解决方案,我有点困惑,因为我确实希望能够覆盖当前状态,尽管事实上如果一个项目已经启用。

4

1 回答 1

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具有上述错误的属性的哈希,因为

  • 1Project已经激活
  • 活动项目不是Project我们正在保存的当前项目。
于 2013-02-02T05:09:15.977 回答