Выполните действие после загрузки файла с Active Storage - PullRequest
1 голос
/ 15 марта 2019

У моей модели has_many_attached :photos.

При первом создании этой модели у нее 0 фотографий.Если я запускаю photos.attached?, я получаю false.

Когда пользователь загружает некоторые файлы на фотографии, мне нужно выполнить некоторые действия, но только в первый раз.Я пытался использовать before_update :if photos.attached?.Но мне нужно знать, обновляет ли пользователь фотографии специально.

Есть ли способ узнать, пытается ли пользователь обновить фотографии?Или есть простой способ сделать это?

Ответы [ 3 ]

2 голосов
/ 15 марта 2019

Существует метод dirty? , который вы можете использовать

class Post < ApplicationRecord
  has_many_attached :photos

  before_update :do_whatever, if: -> { photos.dirty? } 

  def do_whatever
    # doing something
  end
end

Вы также можете попробовать before_update :do_whatever, if: -> { photos_changed? }

0 голосов
/ 15 марта 2019

В Rails не добавлена ​​возможность добавлять проверки вложения файлов. См. Выпуск № 31656

Попробуйте этот подход:

Подтвердить для mime-types:

<%= f.file_field :photos, accept: "image/png,image/gif,image/jpeg', multiple: true %>

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

Чтобы ограничить выполнение action только один раз, вы можете добавить логическое поле к model и установить его на true после успешного завершения действия. Используйте before_update как Antarr Byrd , предлагаемый для проверки после каждой фотографии, прикрепленной к вашей модели.

0 голосов
/ 15 марта 2019

Проверка обратных вызовов (after_create, after_save и т. Д.) В моделях рельсов и опций «on:: create» и «update».

...