Как сделать так, чтобы объект А не прошел проверку, если его объект-Б не прошел проверку - PullRequest
0 голосов
/ 23 сентября 2009

У меня есть форма, которая содержит данные для создания объекта Product. Продукт имеет отношение к изображению примерно так:

has_one :image

На мой взгляд, у меня есть файл ввода так:

<%= f.file_field :image_file %>

В моей модели товара:

  def image_file=(input_data)
    self.image = Image.new({:image_file => input_data})
  end

Модель изображения знает, как обращаться с input_data, и имеет для нее правила проверки. Проблема в том, что если проверка не пройдена, мой продукт создается без изображения.

Как сделать так, чтобы ошибки проверки распространялись обратно на Продукт, чтобы Продукт вообще не создавался и чтобы я мог отображать ошибки в форме?

Поскольку я новичок в Rails, если я все делаю неправильно, пожалуйста, скажите мне.

Ответы [ 2 ]

1 голос
/ 23 сентября 2009

Вы можете использовать validates_associated для этого

0 голосов
/ 23 сентября 2009

Я закончил тем, что создал собственный валидатор:

validate :associated_image

Это метод:

def associated_image
  if image && !image.valid?
    image.errors.each { |attr, msg| errors.add(:image_file, msg)}
  end
end

Спасибо Гарету за указание на validates_associated, но проблема в том, что вы теряете фактические сообщения об ошибках от связанного объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...