私は Book と呼ばれるモデルを持っています。これは、has_many :photos (添付ファイルはペーパークリップで処理されます) です。
私は現在、libcurl を使用する Paul Dix のTyphoeus gem を使用して、JSON を介して Rails アプリと通信するクライアントを構築しています。
新しい Book オブジェクトを POST するのは簡単でした。「Hello There」というタイトルの新しい書籍レコードを作成するには、次のように簡単に行うことができます。
require 'rubygems'
require 'json'
require 'typhoeus'
class Remote
include Typhoeus
end
p Remote.post("http://localhost:3000/books.json",
{ :params =>
{ :book => { :title => "Hello There" }}})
このクエリに写真を追加しようとすると、問題が発生します。HTML フォームを使用して添付ファイルを POST するだけで、次のようなクエリが作成されます。
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>}]}}
したがって、私の仮定は、Remote.post 呼び出しで同じクエリを再作成しようとしているということです。
私は、ハッシュ内のハッシュの配列の構文を最大限に活用していると考えています。私は期待していたもののバリエーションを試みてきました。これは次のようなものです。
p Remote.post("http://localhost:3000/books.json",
{ :params =>
{ :book => { :title => "Hello There",
:photo_attributes => [{ :image => "/path/to/image/here" }] }}})
しかし、これは私がハッシュにしようとしているものを文字列に連結しているようで、返されます( :image => "" ハッシュで何をしても):
NoMethodError (undefined method `stringify_keys!' for "image/path/to/image/here":String):
しかし、これがうまくいかない場合、ここで私の構文の何が問題なのかを理解するのにあまり時間を無駄にしたくないので、私はここに来ると思った.
私の質問は次 のとおりです。私は正しい軌道に乗っていますか? 奇妙に連結された文字列の代わりにハッシュの配列を投稿するようにこの構文をクリアすると、画像を Book オブジェクトに渡すのに十分でしょうか?
それとも私はこれに間違って近づいていますか?