如何为ActiveRecord模型编写带有参数的自定义验证方法?

时间:2020-03-06 14:28:09  来源:igfitidea点击:

在我的模型中,我有:

validate :my_custom_validation

def my_custom_validation
 errors.add_to_base("error message") if condition.exists?
end

我想向mycustomer验证​​中添加一些参数,如下所示:

validate :my_custom_validation, :parameter1 => x, :parameter2 => y

如何编写mycustomvalidation函数以说明参数?

解决方案

我们可以执行以下操作:

def validate
  errors.add('That particular field', 'can not be the value you presented') if !self.field_to_check.blank? && self.field_to_check == 'I AM COOL'
end

无需调用它,因为我相信在进行任何validates_uniqueness_of -like验证后都会处理validate方法(如果存在)。

补充:在此处的Rails API文档中有更多信息。

验证器通常具有一个数组参数,该参数首先指示要验证的字段,最后指示带有选项的哈希(如果存在)。在示例中:

:my_custom_validation, parameter1: x, parameter2: y

:my_custom_validation将是一个字段名称,而parameter1:x,parameter2:y将是一个哈希:

{ parameter1: x, parameter2: y}

因此,我们将执行以下操作:

def my_custom_validation(*attr)
    options = attr.pop if attr.last.is_a? Hash
    # do something with options
    errors.add_to_base("error message") if condition.exists?

end