J'ai un modèle appelé Book, qui a beaucoup de photos (pièces jointes gérées par paperclip).POSTing des pièces jointes via HTTP via l'API JSON
Je suis actuellement en train de construire un client qui communiquera avec mon application Rails via JSON, en utilisant le gem Typhoeus de Paul Dix, qui utilise libcurl.
POSTing un nouvel objet Book était assez facile. Pour créer un nouveau record du livre avec le titre « Bonjour » Je pouvais faire quelque chose d'aussi simple que cela:
require 'rubygems'
require 'json'
require 'typhoeus'
class Remote
include Typhoeus
end
p Remote.post("http://localhost:3000/books.json",
{ :params =>
{ :book => { :title => "Hello There" }}})
Mes problèmes commencent lorsque je tente d'ajouter les photos à cette requête. POSTer simplement les pièces jointes via le formulaire HTML crée une requête comme ceci:
Parameters: {"commit"=>"Submit", "action"=>"create", "controller"=>"books", "book"=>{"title"=>"Hello There", "photo_attributes"=>[{"image"=>#<File:/var/folders/1V/1V8Kw+LEHUCKonqJ-dp3oE+++TI/-Tmp-/RackMultipart20090917-3026-i6d6b9-0>}]}}
Et donc mon hypothèse est que je suis à la recherche de recréer la même requête dans l'appel Remote.post.
Je pense que je laisse la syntaxe de la table de hachage dans un hachage obtenir le meilleur de moi. Je suis tenté de faire des variations de ce que j'attendais fonctionnerait, ce qui serait quelque chose comme:
p Remote.post("http://localhost:3000/books.json",
{ :params =>
{ :book => { :title => "Hello There",
:photo_attributes => [{ :image => "/path/to/image/here" }] }}})
Mais cela semble concaténer dans une chaîne ce que je suis en train de faire dans un hachage, et retourne (peu importe ce que je fais dans: image => « » hachage):
NoMethodError (undefined method `stringify_keys!' for "image/path/to/image/here":String):
Mais je ne veux pas aussi perdre trop de temps à trouver ce qui ne va pas avec ma syntaxe ici si ce n'est pas aller au travail de toute façon, alors je me suis dit que je viendrais ici.
Ma question est: Suis-je sur la bonne voie? Si je supprime cette syntaxe pour publier un tableau de hachages à la place d'une chaîne étrangement concaténée, cela devrait-il suffire à transmettre les images dans l'objet Book?
Ou est-ce que j'approche ce problème?
Ce point est très intéressant , cependant ce client n'est pas une application basée sur un navigateur, donc un iframe est malheureusement hors de question. – btw