客户端验证自定义方法未定义

时间:2013-07-13 10:44:13

标签: ruby-on-rails-3 client-side-validation

使用自定义验证程序加载表单会生成NoMethodError

undefined method `validates_soggetti'

建立

gem 'rails', '3.2.13'
gem 'client_side_validations', :github => 'bcardarella/client_side_validations', :branch => '3-2-stable'

初始化程序已阻止附加消息取消注释。
app / validators / soggetti_validator.rb包含

class SoggettiValidator < ActiveModel::EachValidator

  def validate(record)
    unless :quantita >= :soggetti
      record.errors.add(:soggetti, :too_big) 
    end
  end

  module ActiveModel::Validations::HelperMethods
    def validates_soggetti(*attr_names)
      validates_with SoggettiValidator, _merge_attributes(attr_names)
    end
  end

 end

模型

class Bozza < ActiveRecord::Base
  attr_accessible :height, :quantita, :soggetti, :width

  validates_presence_of :height, :width, :quantita
  validates_numericality_of :height, :width
  validates_numericality_of :quantita, :only_integer => true
  validates_numericality_of :soggetti, :only_integer => true

  validates_soggetti :soggetti
end

YAML表和rails.validations.customValidators.js文件的已编辑错误消息 还尝试在application.js中添加

//= require rails.validations.customValidators

只有自定义验证才会生效。我假设问题在于模块定义。

1 个答案:

答案 0 :(得分:0)

通过在/ lib下创建带有模块语句的validations_helpers.rb文件来解决。

  module ActiveModel::Validations::HelperMethods
    def validates_soggetti(*attr_names)
      validates_with SoggettiValidator, _merge_attributes(attr_names)
    end
  end

并在相关控制器中调用模块。

模型还需要指定rails3方式:

  validates :height, :presence => true, :numericality => true
  validates :width, :presence => true, :numericality => true
  validates :quantita, :presence => true, :numericality => {:only_integer => true}
  validates :soggetti, :soggetti => true, :numericality => {:only_integer => true}

https://github.com/bcardarella/client_side_validations上的说明略有不同 这表明validates_myCustomValidation

相关问题