【问题标题】:Validating uniqueness scoped to range of attribute values验证范围为属性值范围的唯一性
【发布时间】:2019-07-27 12:24:36
【问题描述】:

我正在编写一个邀请系统,其中邀请可以有 4 种状态之一:

enum state: [:pending, :accepted, :rejected, :revoked]

我想验证邀请电子邮件属性的唯一性,以便:
- 如果待处理且待处理或已接受的邀请已存在则无效
- 如果存在被拒绝或撤销的邀请则有效

我试过了:

validates :email, uniqueness: { scope: :status }, if: -> { [:pending, :accepted].include?(status) }

但是,如果存在被拒绝的邀请,这仍然会阻止创建待处理的邀请。

我知道我可以通过自定义验证来做到这一点,但我想知道是否可以通过活动记录验证来实现?

【问题讨论】:

    标签: ruby-on-rails activerecord enums


    【解决方案1】:

    找到了解决办法。我需要的是conditions 选项。

    validates :email, uniqueness: { conditions: -> { where(status: [:pending, :accepted]) } }
    

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多