web-dev-qa-db-fra.com

rails - Affichage de l'image affichée après le téléchargement d'un fichier via Active Storage

J'ai un projet sur Rails 5.1.2 et j'essaie d'y implémenter Active Storage. Après quelques tutoriels en ligne, je suis en mesure de configurer Active Storage et de voir les données enregistrées dans les tableaux active_storage_blobs et active_storage_attachments.

  1. Tutoriel 1
  2. Tutoriel 2

J'ai également confirmé en exécutant user.avatar.attached? et en réponse, je me suis rendu compte que tout se passe bien.

Ce qui me pose problème, c’est d’afficher une image en vue, j’ai essayé

<%= image_tag(url_for(user.avatar)) %>

NoMethodError: méthode non définie `path_storage_attachment_path '

Ce que j'ai fait pour configurer Active Storage

A exécuté la commande d'installation

Rails active_storage:install

Cela donnait l'erreur Je ne sais pas comment construire la tâche 'active_storage: install'

mais la commande suivante a fonctionné

Rails activestorage:install

J'ai ajouté gem 'activestorage' dans gemfile

C'est ce que j'ai dans mon storage_services.yml

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

Dans mon development.rb j'ai ajouté

config.active_storage.service = :local

Dans mon modèle User, j'ai ajouté has_one_attached :avatar

À l'intérieur du contrôleur lors de la mise à jour, j'ai ajouté le code de pièce jointe

user.avatar.attach(params[:user][:avatar])
  1. Je peux voir l'image ajoutée dans la base de données, 
  2. Je peux voir l'image en cours d'enregistrement dans le répertoire de stockage à la racine

Pourtant, je ne suis pas capable de l'afficher,

Qu'est-ce que j'oublie ici? Que dois-je faire pour que l'image s'affiche dans la vue? Pourquoi je reçois cette erreur

NoMethodError: méthode non définie `path_storage_attachment_path '

8
Baig

Pouvez-vous vérifier votre fichier config/appication.rb si vous avez ajouté cette ligne:

require "active_storage/engine"

Je vous recommanderais de mettre à niveau votre version de Rails vers 5.2 beta car elle a fusionné avec Active Storage gem. Si votre application est couverte d'une bonne couverture de tests, vous pouvez le faire maintenant. Il n'y a pas tellement de changements de 5.1 à 5.2 voir http://edgeguides.rubyonrails.org/5_2_release_notes.html . Mais ce n'est pas encore stable, vous devez donc vérifier si vous pouvez prendre ce risque.

3
punitcse