Da Active Storage keine Standardvalidierung hat, wird der Zeitpunkt aufgezeichnet, zu dem Sie die Validierung selbst als Memorandum festlegen.
・ Ruby '2.5.7' ・ Schienen '5.2.3'
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
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.
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.)
Jetzt haben Sie die folgenden Validierungseinstellungen!
Ü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