Я знаю, что есть вопросы, похожие на этот, но я еще не нашел хорошего ответа.Что мне нужно сделать, это отправить описание объекта в один из моих методов создания, который включает в себя несколько различных атрибутов, включая один из них называется: изображение, вложение скрепки:
has_attached_file :image
Теперь я прочитал эту отправкуизображение можно сделать прямо в JSON, кодируя и декодируя изображение как base64, но для меня это выглядит грязным решением.Должны быть лучшие способы.
Другое решение - отправка запроса multipart / form-data, очень похожего на тот, который LEEjava описывает здесь. Проблема в том, что параметры запроса не являютсяинтерпретируется правильно в Rails 3.2.2, и JSON.parse выдает ошибку, когда пытается проанализировать параметры, или, возможно, именно Rails что-то неправильно интерпретирует.
Started POST "/ api / v1/somemodel.json?token=ZoipX7yhcGfrWauoGyog "для 127.0.0.1 в 2012-03-18 15:53:30 +0200 Обработка Api :: V1 :: SomeController # создать как параметры 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}}, "token" => "ZoipX7yhcGfrWauoGyog"}
Это довольно сложно прочитать, извините.JSON.parse (params [: parentmodel]) здесь невозможен, и я не могу JSON.parse (params) также из-за атрибута токена, JSON.parse (params) выдает эту ошибку:
TypeError (не удается преобразовать ActiveSupport :: HashWithIndifferentAccess в String)
, что заставляет меня поверить, что я либо полностью подхожу к этой проблеме, либо просто что-то делаю.В любом случае, мы можем быть уверены, что я ошибаюсь в чем-то.:)
Есть ли лучший способ сделать это?Может кто-нибудь указать мне какое-нибудь руководство / учебное пособие или написать ответ, описывающий, как я должен подходить к этому?
Заранее спасибо
ОБНОВЛЕНИЕ: Так что я на самом делеполучил это работает сейчас, но только в тестах.Я не совсем уверен, как это работает, но, возможно, кто-то может заполнить пробелы для меня?Это часть тестового кода (изображение: 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"}
Запрос сделан так же, как и пост-запрос сделан с помощью rspec:
post "/api/v1/mycontroller.json?token=#{@token}", thefull_object
Так что у меня все работает.Я просто не знаю, как именно это работает!Я тоже хочу создать такой ответ, не только из RSpec.: -)