41 votes

Exception de trombone : Paperclip::AdapterRegistry::NoHandlerError

En utilisant Paperclip 3.0.1 dans les rails 3.2.2, j'ai eu cette erreur:

 **Paperclip::AdapterRegistry::NoHandlerError** 
(No handler found for "2009-11-29-133527.jpg"):

Dans mon modèle j'ai :

 class Product < ActiveRecord::Base
    ...
    has_many :assets 
    accepts_nested_attributes_for :assets
 end

 class Asset < ActiveRecord::Base
     belongs_to :product
     has_attached_file :image,
               :path => ":rails_root/public/system/:attachment/:id/:style/:filename",
               :url => "/system/:attachment/:id/:style/:filename", 
               :styles => { :medium => "300x300>", :thumb => "100x100>" }
  end

L'exception est levée à :

 def create
     **@product = Product.new params[:product]**
     ...
end

avec les paramètres :

 {...,
 "product"=>{"title"=>"wibble1", 
             **"assets_attributes"=>{"0"=>{"image"=>"2009-11-29-133527.jpg"}
                                  },** 
             "description"=>"Who is wibble...", 
             "price"=>"23.45"
            }, 
             "commit"=>"Create Product", 
             ...}

Quelqu'un sait ce qui se passe ?

47voto

Cette erreur est générée car vous ne donnez pas à Paperclip une classe correcte. C'est juste une chaîne.

Vous devriez recevoir quelque chose comme ça en params

 "asset"=>
  {"image"=>
    #<ActionDispatch::Http::UploadedFile:0x000000056679e8
    @content_type="image/jpg",
    @headers= "Content-Disposition: form-data; name=\"asset[image]\";
      filename=\"2009-11-29-133527.jpg\"\r\nContent-Type: image/jpg\r\n",
    @original_filename=""2009-11-29-133527.jpg"",
    @tempfile=#<File:/tmp/RackMultipart20120619-1043-yvc9ox>>}

Et vous devriez avoir quelque chose comme ça dans votre vue (en HAML, très simplifié):

 = form_for @product, html: { multipart: true } do |f|
  = f.fields_for :asset do |asset_form|
    = asset_form.file_field :image

N'oubliez pas de définir votre formulaire sur multipart: true .

29voto

Ken Mazaika Points 724

Je viens de rencontrer ce problème moi-même. Dans mon cas, cela a été causé par le saut de la déclaration de formulaire en plusieurs parties dans le balisage.

J'utilisais formtastic alors j'ai ajouté ceci et l'ai fait fonctionner:

semantic_form_for @picture, :html => {:multipart => true} do |f|

2voto

Mirko Points 2719

J'avais <input type="file" ... multiple="multiple"> sur l'entrée du fichier, donc les données de pièce jointe de trombone étaient dans un tableau. J'ai résolu ce problème simplement en supprimant plusieurs attributs à l'entrée du fichier.

2voto

Manoranjan Points 96

mon problème n'était pas d'accepter la méthode get dans les routes, je l'ai donc changée en méthode de patch et cela fonctionne bien.

 <%= form_for @product, :url => "/products/#{@product.id}/upload",:method => :patch, :html => { :multipart => true } do |f| %>

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