Trombone exception : Trombone::AdapterRegistry::NoHandlerError
L'aide d'un Trombone 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 que 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 soulevée à:
def create
**@product = Product.new params[:product]**
...
end
avec params:
{...,
"product"=>{"title"=>"wibble1",
**"assets_attributes"=>{"0"=>{"image"=>"2009-11-29-133527.jpg"}
},**
"description"=>"Who is wibble...",
"price"=>"23.45"
},
"commit"=>"Create Product",
...}
Ce que quelqu'un sait ce qui se passe?
Vous devez vous connecter pour publier un commentaire.
Cette Erreur est déclenchée parce que vous n'êtes pas de donner un Trombone, une classe correcte. C'est juste une Chaîne de caractères.
Vous devriez recevoir quelque chose comme cela dans
params
Et vous devriez avoir quelque chose comme ceci à votre Vue (HAML, très simplifié):
N'oubliez pas de mettre votre formulaire de
multipart: true
.form_tag path, :multipart => true
sans :clé de html. LienJe viens de tomber sur ce problème moi-même. Dans mon cas, cela a été causé par le saut de l'multipart formulaire de déclaration dans le balisage.
J'ai été en utilisant formtastic j'ai donc ajouté ce et il a obtenu de travail:
semantic_form_for @picture, :html => {:multipart => true} do |f|
:html => {:multipart => true}
comme indiqué ci-dessus. Simplement en ajoutant:multipart => true
ne fonctionne pas comme il le fait avec form_tagRemarque il y a une situation lorsque vous travaillez avec un HTML5 canvas qui vaut la peine de noter. L'obtention de la toile que les données de DataURI chaîne et de l'envoyer au serveur peut provoquer cette erreur. Toile .toDataURL() donnera quelque chose comme "data:image/png;base64,iVBORw0KGg..." que vous pouvez envoyer au serveur avec d'autres informations, de sorte que son différent de celui d'une norme de formulaires multi-upload. Sur le côté serveur si vous définissez cette pour le trombone champ pièce jointe, vous obtiendrez cette erreur. Vous avez besoin de conversion vers un fichier ou IO objet. Vous pouvez écrire un fichier temp comme ceci:
ou de l'utilisation de Ruby StringIO qui agit comme un fichier de la mémoire de l'interface
Espère que cette aide.
J'avais
<input type="file" ... multiple="multiple">
sur le fichier d'entrée, donc, un trombone, des données de pièce jointe a été dans un tableau.J'ai résolu ce problème en supprimant simplement attribut multiple sur le fichier d'entrée.
:multiple => true
, mais comme vous le dites, il définit le nom queupload[upload][]
. Cependant, j'ai vraiment la commodité de plusieurs de sélection de fichier, donc j'ai juste mis le nom manuellement pour ne pas être un tableau avec les:name => 'upload[upload]'
.mon problème était de ne pas accepter la méthode get dans les routes alors je l'ai changé en tant que patch méthode et ça marche bien.
Je suis sûr que votre problème est avec le form_for dans la vue,
essayez quelque chose comme ceci:
Assurez-vous de migrer la base de données après l'installation de Trombone ("rake db:migrate')... Aussi, vous pourriez avoir besoin d'ajouter de nouveaux champs de données générées par un Trombone à votre attr_accessible en ligne " dans le modèle.
J'ai eu un problème similaire quand j'ai essayé d'obtenir un Trombone, workin sur un de mes projets.
J'ai rencontré le même problème, je pense que c'est parce qu'il y a deux tables de partage de la même
attached_file_name
... Dans mon cas, j'ai ajouter un:photo
colonne à la fois des activités et des tweets, l'affaire semble être que le système peut trouver l'un d'eux, mais pas les autres. Parce que les fichiers sont enregistrés dans/public/photo/:id/:id
chemin, si vous avez deux colonnes à la fois nommé commephoto
, alors le problème se produit, je pense.pour moi le problème était comme ça:
J'ai utilisé cette ligne dans le contrôleur, comme vu dans les quelques réponses:
et j'ai eu le problème "pas de gestionnaire pour le fichier"
donc, j'ai juste enlevé le "chemin" et il a travaillé:
Dans mon cas, j'ai été en passant de la Chaîne, comme dans @MauricioPasquierJuan réponse, mais je n'étais pas à l'aide d'un formulaire, pour le reste de la réponse ne s'applique pas.
Je ne pouvais pas trouver toute la documentation de façon à en programmant la mise à jour d'une pièce jointe - ce que les types peuvent être affectés, et pourquoi l'attribution et l'enregistrement l'enregistrement modifié ne pas enregistrer modifié les pièces jointes. Cette question a été la chose la plus proche que j'ai trouvé.
L'intérieur d'une fonction qui traitent des fichiers à l'intérieur d'un téléchargé le fichier zip, après l'enregistrement des fichiers extraits les fichiers temporaires, c'est ma solution:
Lorsque nous avons mis à niveau à partir de 4.2.x 4.3.x, nous avons dû changer la forme de trombone champ d'attribut (
picture
,image
, etc) à partir d'une URL relative à une URL complète pour éliminer cette erreur.