我想为我的字段名称提供自定义错误消息.我偶然发现了另一个SO
question
所以我添加了这样的东西:
class Product < ActiveRecord::Base validate do |prod| prod.errors.add_to_base("Product price can't be blank") if prod.prod_price.blank? end end
但我也想检查prod_price的数字.如果我只是添加
validate_numericality_of:prod_price和产品价格为空,然后两个错误消息都显示出来(空且不是数字).
我试过了
class Product < ActiveRecord::Base validate do |prod| prod.errors.add_to_base("Product price can't be blank") if prod.prod_price.blank? if !prod.prod_price.blank? prod.errors.add_to_base("Product price must be a number") if prod.prod_price.<whatdo i put here> end end end
解决方法
您可以拥有自定义消息,而无需编写自己的验证方法.只需添加:消息:
validates_presence_of:prod_price,:message => “产品价格不能空白”
如果您想在prod_price不存在时跳过数值验证,请添加:allow_nil:
validates_presence_of:prod_price,:message => “产品价格不能空白”
validates_numericality_of:prod_price,: allow_nil =>真正
然后,当缺少prod_price时,数字检查将不会运行.
编辑:
等等,你不希望字段名出现在错误信息中,对吗?我错过了.所以你毕竟需要自定义验证.
编辑#2:
好的,那么:
protected def validate if prod_price.blank? errors.add "Product price can't be blank" else begin Integer(attributes_before_type_cast["prod_price"]) rescue ArgumentError errors.add "Product price must be a number" end end end