[RUBY] [Active Storage] Validierungseinstellungen beim Hochladen von Dateien

Überblick

Da Active Storage keine Standardvalidierung hat, wird der Zeitpunkt aufgezeichnet, zu dem Sie die Validierung selbst als Memorandum festlegen.

Umgebung

・ Ruby '2.5.7' ・ Schienen '5.2.3'

Prozess

1. Vorbereitung

Führen Sie den folgenden Befehl aus, um Active Storage zu installieren.

$ rails active_storage:install

Es wird eine Migrationsdatei erstellt, die die folgenden zwei Tabellen erstellt. ・ Active_storage_attachments ・ Active_storage_blobs

Rails DB: Migrieren Sie, um die Tabelle zu erstellen.

$ rails db:migrate

2. Mit Modell verknüpfen

Wir werden es mit dem Modell verknüpfen. Hierbei wird davon ausgegangen, dass im Benutzermodell mehrere Profilbilder festgelegt sind.

models/user.rb


class User < ApplicationRecord
  has_many_attached :avatars
end

: avatars ist der Name der Datei, und Sie können je nach Zweck der Datei angeben, was Sie möchten, z. B. : photos, : images usw. Es ist nicht erforderlich, Spalten für Bilder im Benutzermodell bereitzustellen.

3. Validierungseinstellungen

Wir werden die Validierung für das Benutzermodell festlegen. Hier nehmen wir die folgenden drei Einstellungen vor.

・ Avatar_type Geben Sie das Dateiformat an, das hochgeladen werden kann.

・ Avatar_size Geben Sie die Größe (Kapazität) einer Datei an, die hochgeladen werden kann.

・ Avatar_Länge Geben Sie die Anzahl der Dateien an, die hochgeladen werden können.

models/user.rb


class User < ApplicationRecord
(Kürzung)
  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, 'Bitte im JPEG- oder PNG-Format hochladen')
      end
    end
  end

  def avatar_size
    avatars.each do |avatar|
      if avatar.blob.byte_size > 5.megabytes
        avatar.purge
        errors.add(:avatars, "Muss innerhalb von 5 MB pro Datei liegen")
      end
    end
  end

  def avatar_length
    if avatars.length > 4
      avatars.purge
      errors.add(:avatars, "Bitte innerhalb von 4 Blatt aufbewahren")
    end
  end
end

Temporäre Daten werden übrigens mit avatars.purge gelöscht. Wenn bei anderen Eingabeelementen ein Validierungsfehler auftritt, wird die hochgeladene Datei im Speicher gespeichert, wenn sie dem Attribut der Modellinstanz in den Serien Rails 5.2 bis 6.0 oder früher zugewiesen wird. Infolgedessen befindet sie sich im Blob. Dies liegt daran, dass sich temporäre Daten für Fehler ansammeln können. (Da jedoch die Funktion von Active Storage beim Update auf Rails 6.0 geändert wurde und die Spezifikation geändert wurde, die nach Ausführung der Speichermethode im Speicher gespeichert werden soll, ist sie nicht erforderlich, wenn sie 6.0 oder höher ist.)

Ergebnis

Jetzt haben Sie die folgenden Validierungseinstellungen! 200919_バリデーションエラー.png

Referenz

Überlegen Sie, ob Active Storage als Ersatz für Carrier Wave verwendet werden kann Implementieren der Bild-Upload-Funktion mit Rails5 Active Storage

Recommended Posts

[Active Storage] Validierungseinstellungen beim Hochladen von Dateien
Rails Active Storage verkleinert Bilder vor dem Hochladen
Führen Sie Active Storage ein
Informationen zu DelegationError (Active Storage)
Handbuch zur Initialisierung des aktiven Speichers
[Anfänger] Über Active Storage
Ein Fehler beim Anzeigen eines Bildes mit Active Storage