我有一个模型(Verification
),我正在尝试验证其唯一性。
但是,我需要将状态(枚举)的唯一性范围限定如下:
class Verification < ActiveRecord::Base
belongs_to :profile
scope :active, -> { where('status NOT IN (?)',
['approved', 'rejected'].map{ |s| self.statuses[s]
}
) }
validates :profile, uniqueness: { scope: :active,
message: "can have only one active per time." }
enum status: [:requested, :processing, :approved, :rejected]
end
我不希望个人资料一次有多个有效验证。
但是当我像上面那样做时,它会引发错误,因为我的active
表中没有名为verifications
的列。
如何仅针对有效验证验证作用域的唯一性?感谢。
答案 0 :(得分:2)
是的,唯一性验证中的scope关键字与Rails范围不同。它与SQL更相关,通常仅限于属性名称(或属性名称集)。
看起来您也可以通过conditions
传递阻止,例如:
validates_uniqueness_of :profile, conditions: -> {
where('status NOT IN (?)',
['approved', 'rejected'].map{ |s| self.statuses[s] }
)
}
答案 1 :(得分:1)
尝试使用proc。
validates_uniqueness_of :profile, :scope => :status, unless: Proc.new { |verification| verification.status == 'approved' || verification.status == 'rejected'}