【问题标题】:Pass field name as parameter to custom validation method Rails 4将字段名称作为参数传递给自定义验证方法 Rails 4
【发布时间】:2014-09-05 12:17:54
【问题描述】:

我有一个自定义验证方法:

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

目标是禁止包含[""] 的参数通过验证,但我需要像这样调用此方法:

validate :my_custom_validation #and somehow pass here my field names

例如:

 validate :my_custom_validation(:industry) 

【问题讨论】:

    标签: ruby-on-rails ruby validation ruby-on-rails-4 web


    【解决方案1】:

    由于您需要以这种方式验证多个属性,我建议您使用这样的自定义验证器:

    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
    

    然后验证为

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 2014-02-09
      相关资源
      最近更新 更多