[RUBY] [Stockage actif] Paramètres de validation lors du téléchargement de fichiers

Aperçu

Étant donné qu'Active Storage n'a pas de validation par défaut, il enregistre l'heure à laquelle vous définissez vous-même la validation sous forme de mémorandum.

environnement

・ Rubis '2.5.7' ・ Rails '5.2.3'

processus

1. Préparation

Exécutez la commande suivante pour installer Active Storage.

$ rails active_storage:install

Un fichier de migration est créé qui crée les deux tables suivantes. ・ Active_storage_attachments ・ Active_storage_blobs

rails db: migrez pour créer la table.

$ rails db:migrate

2. Associer au modèle

Nous l'associerons au modèle. Ici, on suppose que plusieurs images de profil sont définies dans le modèle utilisateur.

models/user.rb


class User < ApplicationRecord
  has_many_attached :avatars
end

: avatars est le nom du fichier, et vous pouvez spécifier ce que vous voulez, comme : photos '', : images '', etc. en fonction de l'objectif du fichier. Il n'est pas nécessaire de fournir des colonnes pour les images dans le modèle utilisateur.

3. Paramètres de validation

Nous définirons la validation pour le modèle utilisateur. Ici, nous allons effectuer les trois réglages suivants.

・ Avatar_type Spécifiez le format de fichier qui peut être téléchargé.

・ Taille de l'avatar Spécifiez la taille (capacité) d'un fichier qui peut être téléchargé.

・ Longueur_avatar Spécifiez le nombre de fichiers pouvant être téléchargés.

models/user.rb


class User < ApplicationRecord
(réduction)
  validate :avatar_type, :avatar_size, :avatar_length

  private

  def avatar_type
    avatars.each do |avatar|
      if !avatar.blob.content_type.in?(%('image/jpeg image/png'))
        avatar.purge
        errors.add(:avatars, 'Veuillez télécharger au format jpeg ou png')
      end
    end
  end

  def avatar_size
    avatars.each do |avatar|
      if avatar.blob.byte_size > 5.megabytes
        avatar.purge
        errors.add(:avatars, "Doit être dans les 5 Mo par fichier")
      end
    end
  end

  def avatar_length
    if avatars.length > 4
      avatars.purge
      errors.add(:avatars, "Veuillez garder dans les 4 feuilles")
    end
  end
end

Au fait, les données temporaires sont supprimées par `ʻavatars.purge``. Si une erreur de validation se produit dans d'autres éléments d'entrée, le fichier téléchargé sera enregistré dans le stockage lorsqu'il est affecté à l'attribut de l'instance de modèle dans les séries Rails 5.2 à 6.0 ou antérieures, et par conséquent, il sera dans le blob. Cela est dû au fait que les données temporaires pour les erreurs peuvent s'accumuler. (Cependant, il y a eu un changement dans la fonction d'Active Storage dans la mise à jour vers Rails 6.0, et après que la méthode de sauvegarde a été exécutée, elle a été changée en spécification pour être sauvegardée dans le stockage, donc il est inutile si elle est 6.0 ou ultérieure)

résultat

Vous disposez maintenant des paramètres de validation suivants! 200919_バリデーションエラー.png

référence

Déterminez si Active Storage peut être utilisé comme un substitut à Carrier Wave Implémenter la fonction de téléchargement d'images à l'aide de Rails5 Active Storage

Recommended Posts

[Stockage actif] Paramètres de validation lors du téléchargement de fichiers
Rails Active Storage réduit les images avant le téléchargement
Présentez le stockage actif
À propos de DelegError (Active Storage)
Manuel d'initialisation du stockage actif
[Débutant] À propos du stockage actif
Une erreur commise lors de l'affichage d'une image à l'aide du stockage actif