您可以通过将要执行的简单 Ruby 字符串、Proc 或方法名称作为符号作为值传递给验证选项:if
或:unless
在选项中传递验证条件。这里有些例子:
在 Rails 5.2 版本之前,您可以传递一个字符串:
# using a string:
validates :name, uniqueness: true, if: 'name.present?'
从 5.2 开始,不再支持字符串,为您提供以下选项:
# using a Proc:
validates :email, presence: true, if: Proc.new { |user| user.approved? }
# using a Lambda (a type of proc ... and a good replacement for deprecated strings):
validates :email, presence: true, if: -> { name.present? }
# using a symbol to call a method:
validates :address, presence: true, if: :some_complex_condition
def some_complex_condition
true # do your checking and return true or false
end
在您的情况下,您可以执行以下操作:
class Question < ActiveRecord::Base
attr_accessible :user_id, :created_on
validates_uniqueness_of :created_on, :scope => :user_id, unless: Proc.new { |question| question.user.is_admin? }
end
请查看 rails 指南上的条件验证部分以获取更多详细信息:http ://edgeguides.rubyonrails.org/active_record_validations.html#conditional-validation