@vanderv
Ruby on Rails

[RoR] Как получить предыдущее изображение paperclip, если форма не валидна?

Есть форма с валидацией изображения на размер и тип. Если валидация не проходит, то мне необходимо вернуть старое значение формы, а получается что приходит новое изображение, которое не загрузилось на сервер и по итогу превью фото показывает несуществующий файл. У обычного атрибута модели можно получить добавив постфикс _was. С paperclip такое не работает.
before_post_process :skip_if_invalid
  def skip_if_invalid
    unless self.valid?
      self.image = self.image_was # И теперь image_tag(model.image.url) покажет предыдущую картинку
      return false
    end
  end
  • Вопрос задан
  • 2413 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Finist
Могу предложить использовать вот такой трюк тогда даже если валидация не пройдет, новое изображение останется.
Ответ написан
Комментировать
Vakiliy
@Vakiliy
Если я правильно понял что требуется, то вот так можно:
def image_with_reload
  image_without_reload.instance.reload if errors.any?
  image_without_reload
end
alias_method_chain :image, :reload
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы