Ruby on rails 验证作用域为属性值范围的唯一性

Ruby on rails 验证作用域为属性值范围的唯一性,ruby-on-rails,activerecord,enums,Ruby On Rails,Activerecord,Enums,我正在编写一个邀请系统,其中邀请可以有4种状态中的1种: enum state: [:pending, :accepted, :rejected, :revoked] 我想验证邀请电子邮件属性的唯一性,以便: -如果挂起且已存在挂起或接受的邀请,则无效 -如果存在被拒绝或吊销的邀请,则有效 我试过: validates :email, uniqueness: { scope: :status }, if: -> { [:pending, :accepted].include?(statu

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

enum state: [:pending, :accepted, :rejected, :revoked]
我想验证邀请电子邮件属性的唯一性,以便:
-如果挂起且已存在挂起或接受的邀请,则无效
-如果存在被拒绝或吊销的邀请,则有效

我试过:

validates :email, uniqueness: { scope: :status }, if: -> { [:pending, :accepted].include?(status) }
但是,如果存在被拒绝的邀请,这仍然会阻止创建挂起的邀请


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

找到了解决方案。我需要的是
条件
选项

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