我正在尝试设置条件验证,并且我传递给它的方法是否返回true
或false
对象将保存。
当test
返回false
时,我不希望该对象保存
class Foo < ActiveRecord::Base
belongs_to :order
belongs_to :user
validates :order, presence: true
validates :user, presence: true, if: :test
private
def test
false
end
end
控制器:
def create
foo = Foo.new(foo_params)
if foo.save
render json: delivery, status: 201
else
render json: { errors: foo }, status: 422
end
end
答案 0 :(得分:2)
对于您的情况,如果:test
返回false
,则会跳过user
验证。但是,如果您希望强制验证始终失败,请替换验证器并将值传递给它:
应用/验证/ custom_presence_validator.rb 强>:
class CustomPresenceValidator < AM::EachValidator
def validate_each record, attribute, value
if options[:with].try(:[], :fail)
record.errors[ attribute ] << 'forced fail'
elsif value.blank?
record.errors[ attribute ] << 'can\'t be blank'
end
end
end
并使用它:
validates :user, custom_presence: { fail: true }
或者根据您的意愿,您也可以:before_save
。