Я знаю, что есть вопросы, подобные этому, но я пока не нашел хорошего ответа. Что мне нужно сделать, это отправить описание объекта одному из моих методов создания, который включает в себя несколько разных атрибутов, включая одно: image, приложение paperclip:
has_attached_file :image
Теперь я прочитал, что отправка изображения может быть выполнена прямо в JSON путем кодирования и декодирования изображения в качестве base64, но для меня это похоже на грязное решение. Должны быть лучшие способы.
Другое решение отправляет запрос multipart/form-data, как и Здесь описывается LEEjava. Проблема с этим заключается в том, что параметры запроса неверно интерпретируются в Rails 3.2.2, а JSON.parse выдает ошибку при попытке проанализировать параметры, или, возможно, это Rails неправильно интерпретирует.
Запущен POST "/api/v1/somemodel.json?token=ZoipX7yhcGfrWauoGyog" для 127.0.0.1 в 2012-03-18 15:53:30 +0200 Обработка Api:: V1:: SomeController # create as JSON Параметры: { "{\n
\" parentmodel \ ": {\n\" superparent_id \ ": 1,\n
\" description \ ":\" Наслаждайтесь цветком \ ",\n\" \ ":" = > { "\n
{\n\" someattribute \ ": 1,\n
\" someotherattribute \ ": 2,\n\" image \ ":\" image1 \ "\n
}\n" = > { "\n}\n}" = > nil}}, "токен" = > "ZoipX7yhcGfrWauoGyog" }
Трудно это прочитать, извините. JSON.parse(params [: parentmodel]) здесь невозможен, и я не могу JSON.parse(params) либо из-за атрибута токена, JSON.parse(params) выдает эту ошибку:
TypeError (не может преобразовать ActiveSupport:: HashWithIndifferentAccess в строку)
Это заставляет меня поверить, что я либо слишком плохо подхожу к этой проблеме, либо просто делаю что-то. В любом случае, мы можем быть уверены, что я ошибаюсь.:)
Есть ли лучший способ сделать это? Может ли кто-нибудь указать мне на какой-либо руководство/учебник или написать ответ, описывающий, как я должен подходить к этому?
Заранее благодарю
UPDATE: Таким образом, я действительно получил его сейчас, но только в тестах. Я не совсем уверен, как это работает, но, возможно, кто-то может заполнить пробелы для меня? Это часть тестового кода (изображение: fixture_file_upload (...) является важной частью).
parts_of_the_object = { someattribute: 0, someotherattribute: 0, image: fixture_file_upload('/images/plot.jpg', 'image/jpg') }
Мои параметры [] выглядят как обычная форма HTML, которая является странной (и удивительной):
Parameters: {"superparentid"=>"1", "plots"=>[{"someattribute"=>"0", "someotherattribute"=>"0", "image"=>#<ActionDispatch::Http::UploadedFile:0x007f812eab00e8 @original_filename="plot.jpg", @content_type="image/jpg", @headers="Content-Disposition: form-data; name=\"plots[][image]\"; filename=\"plot.jpg\"\r\nContent-Type: image/jpg\r\nContent-Length: 51818\r\n", @tempfile=#<File:/var/folders/45/rcdbb3p50bl2rgjzqp3f0grw0000gn/T/RackMultipart20120318-1242-1cn036o>>}], "token"=>"4L5LszuXQMY6rExfifio"}
Запрос выполняется точно так же, как и post post выполняется с помощью rspec:
post "/api/v1/mycontroller.json?token=#{@token}", thefull_object
Итак, у меня все работает. Я просто не знаю, как это работает! Я тоже хочу создать такой ответ, не только от RSpec.: -)