У меня есть модель под названием Book, которая has_many: фотографии (прикрепленные файлы обрабатываются скрепкой).
В настоящее время я создаю клиент, который будет взаимодействовать с моим приложением Rails через JSON, используя гем Typhoeus Пола Дикса, который использует libcurl.
Размещать новый объект Book было достаточно просто. Чтобы создать новую книгу с названием «Привет!», Я мог бы сделать что-то простое:
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-форму создает запрос, подобный следующему:
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?
Или я подхожу к этому неправильно?