【发布时间】:2020-06-17 17:17:26
【问题描述】:
我有一个模型验证,如下所示
validates :value, presence: true, allow_blank: false, uniqueness: { scope: [:account_id, :provider] }
我想在唯一性内再添加一个区分大小写的条件,如下所示
validates :value, presence: true, allow_blank: false, uniqueness: { scope: [:account_id, :provider], case_sensitive: :is_email? }
def is_email?
provider != email
end
简而言之,当电子邮件提供商不是电子邮件时,它不应该验证 case_sensitive,但目前,它不起作用,它只期望 true 或 false,而不是任何方法或任何条件。
如何在 Rails 中实现这一点?我已经编写了自定义验证,因为它不起作用。
更新
如果我像下面这样添加另一个验证
validates_uniqueness_of :value, case_sensitive: false, if: -> { provider == 'email' }
两次:value=>["has already been taken", "has already been taken"]给我同样的错误
【问题讨论】:
标签: ruby-on-rails activerecord