[RUBY] Rails Active_storage -Simplifier l'enregistrement des images-
Qu'est-ce que le stockage actif h1>
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 h2>
-
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.
Ceci complète le "conteneur" pour stocker les images.
Description du modèle: joindre une image h2>
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 h2>
En regardant la table des messages de seaquel_pro, la colonne image n'existe pas
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 h2>
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 h2>
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! !!