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

16

在我的模型中,我有:

validate :my_custom_validation

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

我想要像下面这样给我的客户验证添加一些参数:

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

如何编写mycustomvalidation函数以考虑参数?

3个回答

7

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

: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

2
你可以像这样做:

你只需要这样做:

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

不需要引用它,因为我相信如果存在validate方法,则在任何类似于validates_uniqueness_of的验证之后处理它。
补充:Rails API文档这里提供更多信息。

0

您还应该能够使用 Ruby lambda来帮助验证模型属性(x,y)的方法,如下所示:

validate -> { my_custom_validation(parameter1: x, parameter2: y) }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接