[RUBY] Rails Active_storage -Simplifier l'enregistrement des images-

Qu'est-ce que le stockage actif Active Storage est une fonction de téléchargement de fichiers. Avec cela, vous pouvez facilement créer une fonction de publication d'image, etc. avec un formulaire. Vous pouvez facilement télécharger des fichiers vers des services de stockage cloud (Amazon S3, Google Cloud Storage, Microsoft Azure Storage, etc.).

Méthode d'introduction
  • Créer une table avec Active_storage
% rails active_storage:install

Installez Active_storage et générez les fichiers associés (migration, etc.)

%rails db:migrate

Si vous cochez Seaquel Pro et que le tableau suivant est généré, il réussit jusqu'à présent. image.png Ceci complète le "conteneur" pour stocker les images.

Description du modèle: joindre une image Les informations d'image telles que «joindre une image à un message» ou «joindre une image à des informations sur le produit» sont souvent liées à d'autres modèles. Une idée courante ici est de créer un modèle d'image et de former une association car il existe une table d'images. En fait, il n'est pas nécessaire de créer un modèle distinct pour la table créée par active_storage. Ajoutez "has_one_attached: file name" au modèle dans lequel vous souhaitez participer et l'association sera terminée. Cette fois, nous supposerons que vous formerez une association avec le message. models/message.rb
class Message < ApplicationRecord
  ~Les descriptions telles que d'autres associations sont omises~

  has_one_attached :image
 
end

Il peut être plus facile d'imaginer dire "j'ai fait une pseudo colonne d'image" plutôt qu'une association.

Description du contrôleur: paramètres forts

En regardant la table des messages de seaquel_pro, la colonne image n'existe pas image.png

Cependant, en raison de has_one_attached décrit dans le modèle, il existe une "pseudo colonne d'image" dans la table des messages.

  • Les informations d'image sont enregistrées dans la table générée par rails active_storage: install.

À partir de là, les informations sur l'image peuvent être ignorées dans les paramètres de messages_controller.rb.

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

Afficher la description: Envoyer l'image Pour cela, utilisez l'élément de formulaire file_field comme d'habitude.
<%= form_with model: @message, local: true  do |form| %>
  <%= form.text_area :content %><br>
  <%= form.file_field :image %><br>
  <%= form.submit %>
<% end %>

Voir la description: Afficher l'image Vous pouvez également utiliser la balise img, mais utilisez image_tag, une méthode d'aide pour les rails, pour simplifier la description.
<% if @message.image.attached? %>
  <%= image_tag @message.image %>
<% end %>

c'est tout! !!

Recommended Posts

Rails Active_storage -Simplifier l'enregistrement des images-
Utiliser des images avec des rails
[rails] Comment publier des images
[Rails] Télécharger des vidéos avec Rails (ActiveStorage)
[Rails] Enregistrez des images à l'aide de carrierwave
Rails6 OmniAuth activestorage Obtenir l'image de l'utilisateur