使用自定义验证程序加载表单会生成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
只有自定义验证才会生效。我假设问题在于模块定义。
答案 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