Ruby on rails 验证作用域为属性值范围的唯一性
我正在编写一个邀请系统,其中邀请可以有4种状态中的1种: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
enum state: [:pending, :accepted, :rejected, :revoked]
我想验证邀请电子邮件属性的唯一性,以便:-如果挂起且已存在挂起或接受的邀请,则无效
-如果存在被拒绝或吊销的邀请,则有效 我试过:
validates :email, uniqueness: { scope: :status }, if: -> { [:pending, :accepted].include?(status) }
但是,如果存在被拒绝的邀请,这仍然会阻止创建挂起的邀请
我知道我可以通过自定义验证来实现这一点,但我想知道是否可以通过活动记录验证来实现这一点?找到了解决方案。我需要的是
条件
选项
validates :email, uniqueness: { conditions: -> { where(status: [:pending, :accepted]) } }