Rails 3.1:通过关系在has_many的连接表上自定义validation消息?

我有一个Meal模型has_many :foods, :through => :servingsMeal还:

 accepts_nested_attributes_for :servings, :allow_destroy => true validates_associated :servings 

Serving模型有一个名为serving_amount的字段和一个名为amount_recorded的字段。 在Serving模型中,我目前使用此validation:

 validates :serving_size, :numericality => {:greater_than => 0}, :if => :amount_recorded? 

validation失败时返回的消息很糟糕。 事实上,每餐可能有多份食物。

如何创建引用服务大小无效的食物名称的自定义validation消息? 例如,我想说,“你为西瓜输入了一个无效的服务大小”,如果amount_recorded为一个name西瓜的Food的服务是真的,validation失败。

我会尝试validates_each方法。 在调用方法时,您将传递一个块,该块将传递记录实例(来自文档 ):

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

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