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
.
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])
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 '
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.