validates_uniqueness_of

时间:2013-02-02 04:52:55

标签: ruby-on-rails model

我要做的是为Project提出模型,其中一次只能激活一个项目。所以我想为projects创建一个表,为status创建另一个表。

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

1 个答案:

答案 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属性的哈希,其中包含上述错误

  • 1 Project已启用
  • 有效项目我们正在保存的当前Project