55 votes

Affichage d'un nom de fichier Carrierwave dans la vue

J'essaie d'afficher le nom de fichier d'une pièce jointe Carrierwave dans un modèle erb Rails. Ce qui suit ne fonctionne pas:

<%= @page.form.filename %>

Cela semble conforme à la documentation . Une étape supplémentaire est-elle nécessaire?

Mon modèle de page ressemble à ceci:

 class Page < ActiveRecord::Base

  mount_uploader :form, FormUploader

end
 

L'uploader de formulaire ressemble à ceci:

 class FormUploader < CarrierWave::Uploader::Base

  storage :file

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def extension_white_list
    %w(pdf)
  end

end
 

85voto

kikito Points 23229

J'ai pu obtenir le nom de fichier via le paramètre interne file :

 <%= @page.form.file.filename %>
 

81voto

Zachary Anker Points 3287

La documentation que vous consultez est le fichier nettoyé, c'est ce qu'il utilise pour stocker réellement un fichier. La partie que vous recherchez est FormUploader, qui est un uploader, et fait partie de http://rubydoc.info/gems/carrierwave/0.5.2/CarrierWave/Uploader

Si vous souhaitez obtenir le nom du fichier, vous pouvez soit le lire directement dans la colonne de la base de données, soit utiliser File.basename(@page.form.path) pour l'extraire facilement.

16voto

epylinkn Points 458

Les documents Carrierwave sont peut-être un peu décalés, mais la méthode recommandée semble être:

@page.form.file.identifier

9voto

omarvelous Points 1674

La solution de @ adamonduty est excellente. Une autre solution que j'ai utilisée auparavant, il suffit de créer une méthode sur le modèle:

   def name
    file.path.split("/").last
  end
 

4voto

adamonduty Points 1202

Si vous utilisez ActiveRecord, vous pouvez accéder directement au champ nommé form de deux manières:

 def my_method
  self[:form]
end
 

ou

 def my_method
  form_before_type_cast
end
 

La deuxième méthode est en lecture seule.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X