[RUBY] Rails Active_storage - Vereinfachen Sie das Speichern von Bildern -

Was ist aktiver Speicher? Active Storage ist eine Funktion zum Hochladen von Dateien. Mit dieser Funktion können Sie ganz einfach eine Bildposting-Funktion usw. mit einem Formular erstellen. Sie können Dateien problemlos in Cloud-Speicherdienste (Amazon S3, Google Cloud Storage, Microsoft Azure Storage usw.) hochladen.

Einführungsmethode
  • Erstellen Sie eine Tabelle zusammen mit Active_storage
% rails active_storage:install

Installieren Sie Active_storage und generieren Sie verwandte Dateien (Migration usw.)

%rails db:migrate

Wenn Sie Seaquel Pro aktivieren und die folgende Tabelle generiert wird, ist dies bisher erfolgreich. image.png Dies vervollständigt den "Container" zum Speichern von Bildern.

Modellbeschreibung: Fügen Sie ein Bild hinzu Bildinformationen wie "Ein Bild an eine Nachricht anhängen" oder "Ein Bild an eine Produktinformation anhängen" beziehen sich häufig auf andere Modelle. Hier wird häufig ein Bildmodell erstellt und eine Zuordnung gebildet, da eine Bildtabelle vorhanden ist. Tatsächlich muss kein separates Modell für die von active_storage erstellte Tabelle erstellt werden. Fügen Sie dem Modell, an dem Sie beteiligt sein möchten, "has_one_attached: Dateiname" hinzu, und die Zuordnung wird abgeschlossen. Dieses Mal gehen wir davon aus, dass Sie eine Verknüpfung mit der Nachricht herstellen. models/message.rb
class Message < ApplicationRecord
  ~Beschreibungen wie andere Assoziationen werden weggelassen~

  has_one_attached :image
 
end

Es ist vielleicht leichter vorstellbar, "Ich habe eine Pseudobildspalte erstellt" zu sagen, als eine Assoziation.

Controller-Beschreibung: Starke Parameter

In der Nachrichtentabelle von seaquel_pro ist die Bildspalte nicht vorhanden image.png

Aufgrund der im Modell beschriebenen has_one_attached befindet sich jedoch eine "Pseudobildspalte" in der Nachrichtentabelle.

  • Bildinformationen werden in der Tabelle gespeichert, die von Rails active_storage: install generiert wird.

Von hier aus können die Bildinformationen in params in messages_controller.rb übersprungen werden.

controllers/messages_controller.rb

class MessagesController < ApplicationController

  def new
    @message = Message.new
  end

  def create
   @mesage = Message.create(message_params)
  end

  private

  def message_params
      params.require(:message).permit(:content, :image).merge(user_id: current_user.id)
  end
end

Beschreibung anzeigen: Bild senden Verwenden Sie dazu wie gewohnt das Formularelement file_field.
<%= form_with model: @message, local: true  do |form| %>
  <%= form.text_area :content %><br>
  <%= form.file_field :image %><br>
  <%= form.submit %>
<% end %>

Beschreibung anzeigen: Bild anzeigen Sie können auch das img-Tag verwenden, aber die Rails-Hilfsmethode image_tag verwenden, um die Beschreibung zu vereinfachen.
<% if @message.image.attached? %>
  <%= image_tag @message.image %>
<% end %>

das ist alles! !!

Recommended Posts

Rails Active_storage - Vereinfachen Sie das Speichern von Bildern -
Verwenden Sie Bilder mit Schienen
[Schienen] Wie poste ich Bilder?
[Rails] Videos mit Rails hochladen (ActiveStorage)
[Schienen] Speichern Sie Bilder mit Carrierwave
Rails6 OmniAuth activestorage Benutzerbild abrufen