2009-11-07 2 views
8

Я действительно ударил стену и мне нужна помощь! Спасибо тебе за это!Загрузка в Ruby on Rails с iPhone с помощью ASIHTTPRequest

Я нахожусь в середине написания приложения, которое говорит с моим веб-сервером ROR для запросов к базе данных и отлично работает благодаря ActiveResource. Но теперь мне нужно также загружать файлы на сервер, и я планирую использовать ASIHTTPRequest, который отлично смотрится, моя проблема, хотя я просто не уверен, как передать запрос POST на стороне ROR ... Я использую paperclip но действительно поразили кирпичную стену.

На стороне ASIHTTP я просто пишу:

[request setData:data withFileName:@"photo.jpg" andContentType:@"image/jpeg" forKey:@"asset[image]"]; 

и на стороне рубинового я делаю ...

class Asset < ActiveRecord::Base 
    validates_attachment_presence :image 
    has_attached_file :image 
end 

class AssetsController < ApplicationController 
    protect_from_forgery :only => [:update, :destroy] 
..... 

Но это всегда терпит неудачу, я уверен, это как-то связано с набором данных формы POST, но я полностью застрял.

Я получаю сообщение об ошибке:

Parameters: {"assets"=>{"images"=>#<File:/var/folders/gM/gM15qjM2G3W0iVNaT1evD++++TI/-Tmp-/RackMultipart20091112-2285-2i0qq5-0>}} 

NoMethodError (You have a nil object when you didn't expect it! 
You might have expected an instance of ActiveRecord::Base. 
The error occurred while evaluating nil.[]): 
    app/models/asset.rb:2 
    app/controllers/assets_controller.rb:46:in 

`create'

Любая помощь будет очень большой благодарностью.

Chris

Thanks!

ответ

1

Первое, что я проверил при выполнении загрузки, - это установить имя параметра для того, что ожидает файл_колонна (или что-то еще, что я использовал бы с помощью Paperclip).

Если у вас есть что-то вроде:

class Entry < ActiveRecord::Base 
    file_column :image 
end 

Вам необходимо убедиться, что параметр (имя поля формы) соответствует тому, что, как ожидается. Для приведенного выше примера это будет:

name="entry[image]" 

Кроме того, убедитесь, что вы делаете многослойную форму пост, а не только стандартный.

+1

Я также обнаружил, что вам нужно включить [request setPostValue: @ "Создать" forKey: @ "commit"]; – Chris