Rails 3.1: Пользовательское сообщение проверки в соединительной таблице отношения has_many через? - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть Meal модель, которая has_many :foods, :through => :servings.Meal также:

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

Модель Serving имеет поле с именем serving_amount и поле с именем amount_recorded.В модели Serving я в настоящее время использую эту проверку:

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

Сообщение, возвращаемое при неудачной проверке, ужасно.Это усугубляется тем, что каждый прием пищи может иметь несколько порций.

Как создать специальное сообщение проверки, которое ссылается на название продукта, для которого размер порции недействителен?Например, я хотел бы сказать: «Вы ввели неверный размер порции для Арбуза», если amount_recorded верно для порции Food с name арбузом, и проверка не пройдена.

1 Ответ

3 голосов
/ 12 декабря 2011

Я бы попробовал метод 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

Это означает, что вы можете получить доступ к любому из атрибутов записей, включаяимя и легко построить сообщение об ошибке.

...