Ruby on rails Rails 3.1:has\u many through关系的联接表上的自定义验证消息?

Ruby on rails Rails 3.1:has\u many through关系的联接表上的自定义验证消息?,ruby-on-rails,validation,ruby-on-rails-3.1,has-many-through,Ruby On Rails,Validation,Ruby On Rails 3.1,Has Many Through,我有一个套餐模式,有很多:食物,:通过=>:服务膳食另外: accepts_nested_attributes_for :servings, :allow_destroy => true validates_associated :servings 服务模型有一个名为服务金额的字段和一个名为记录金额的字段。在服务模型中,我当前使用此验证: validates :serving_size, :numericality => {:greater_than => 0}, :if =

我有一个
套餐
模式,
有很多:食物,:通过=>:服务
<代码>膳食另外:

accepts_nested_attributes_for :servings, :allow_destroy => true
validates_associated :servings
服务
模型有一个名为
服务金额
的字段和一个名为
记录金额
的字段。在
服务
模型中,我当前使用此验证:

validates :serving_size, :numericality => {:greater_than => 0}, :if => :amount_recorded?
验证失败时返回的消息非常糟糕。每顿饭可能有多份,这一事实使情况更加复杂


我如何创建一个自定义验证消息,该消息引用的食品名称的服务大小是无效的?例如,我希望它说,“您为西瓜输入了无效的份量”,如果
记录的数量对于
名称为
食物
是真的,并且验证失败。

我会尝试
验证每个
方法。调用该方法时,向其传递一个块,该块将被传递给记录实例(从):


这意味着您可以访问任何记录属性,包括名称,并轻松构造错误消息。

我将尝试
验证每个方法。调用该方法时,向其传递一个块,该块将被传递给记录实例(从):

这意味着您可以访问任何记录属性,包括名称,并轻松构造错误消息

validates_each :first_name, :last_name do |record, attr, value|
  record.errors.add attr, 'starts with z.' if value.to_s[0] == zz
end