ruby-on-rails - 将字段名称作为参数传递给自定义验证方法 Rails 4

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

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

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) 

最佳答案

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

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

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

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

关于ruby-on-rails - 将字段名称作为参数传递给自定义验证方法 Rails 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25685746/

相关文章:

ruby-on-rails - 从 Rails 应用程序卸载 Twitter Bootstrap

ruby-on-rails - 将现有的新遗物帐户连接到 heroku rails 应用程序以监控内存

ruby-on-rails - Rspec 测试属于并且有很多

ruby - Ruby 标准库引用

javascript - 预编译时未找到 javascript 资源中的路由辅助方法

ruby - 安装 Thrift 时出错 : can't find header files for ruby

html - 如果输入验证失败,则在没有 js 的情况下更改标签的颜色

c++ - isdigit 在输入 £ 和 ¬ 时引发调试断言

php - Laravel 4 中未加载自定义验证类

ruby-on-rails - Sidekiq 在生产环境中监控无 CSS 和 Bootstrap