将字段名称作为参数传递给自定义validation方法Rails 4

我有一个自定义validation方法:

def my_custom_validation errors.add(specific_field, "error message") if specific_field.delete_if { |i| i.blank? }.blank? end 

目标是禁止包含[""]参数通过validation,但我需要调用此方法,如:

 validate :my_custom_validation #and somehow pass here my field names 

例如:

  validate :my_custom_validation(:industry) 

由于您需要以这种方式validation多个属性,我建议使用如下自定义validation器:

 class EmptyArrayValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) record.errors[attribute] << (options[:message] || "cannot be emtpy") if value.delete_if(&:blank?).empty? end end 

然后validation为

 validates :industry, empty_array: true validates :your_other_attribute, empty_array: true 

或者,如果您不想专门创建一个类,因为它只需要1个模型,您可以将其包含在模型本身中

 validates_each :industry, :your_other_attribute, :and_one_more do |record, attr, value| record.errors.add(attr, "cannot be emtpy") if value.delete_if(&:blank?).empty? end