Rails - Как предотвратить удаление всех дочерних записей родителя - PullRequest
0 голосов
/ 11 января 2012
Listing < AR
  has_many :images
  accepts_nested_attributes_for :images, :allow_destroy => true
  validate :validate_image_count

  def validate_image_count
    errors.add_to_base("too few") if images.length < 1
  end
end

Image < AR
  belongs_to :listing
end

В моей форме редактирования Листинга # я использую fields_for, чтобы предоставить поля для всех изображений вместе с флажками для удаления изображений.Это работает нормально.Я хочу применить проверку таким образом, чтобы листинг действовал только в том случае, если в нем было хотя бы одно изображение и максимум 6.

В моей текущей настройке я могу перейти к редактированию и удалению всех изображений, а затем обновитьЛистинг.

Я пытался использовать проверку, как показано выше, но это не вызывается.Может быть, именно так nested_attributes работает в рельсах.Каков наилучший способ применить эту проверку?

1 Ответ

0 голосов
/ 11 января 2012

, так как изображения не будут удалены при вызове метода проверки, он вернет true на длине изображения.Вы можете использовать mark_for_destruction?

def validate_image_count
    errors.add_to_base("too few") self.images.any? { |i| i.marked_for_destruction? }
end
...