2009-11-07 8 views
8

¡Realmente he chocado contra una pared y necesito ayuda! ¡Gracias por leer hasta aquí!Subiendo a Ruby on Rails desde iPhone usando ASIHTTPRequest

Estoy en el medio de escribir una aplicación que habla con mi servidor web ROR para las solicitudes de bases de datos y funciona muy bien gracias a ActiveResource. Pero ahora también necesito cargar archivos en el servidor, y planeo usar ASIHTTPRequest, que se ve muy bien, aunque mi problema es que no estoy seguro de cómo entregar la solicitud POST en el lado ROR ... Estoy usando un clip para papeles pero realmente han golpeado una pared de ladrillos.

En el lado ASIHTTP Simplemente estoy escribiendo:

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

y en el lado de rubí que estoy haciendo ...

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

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

Pero siempre falla, estoy bastante seguro tiene algo que ver con el conjunto de datos de formulario POST, pero estoy completamente atascado.

estoy recibiendo el error:

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'

Cualquier ayuda sería recibida muy, muy agradecido.

Chris

Thanks!

Respuesta

1

Lo primero que verificaría con la carga es establecer el nombre del parámetro a lo que file_column (o lo que sea, personalmente usaría Paperclip) está esperando.

Si usted tiene algo así como:

class Entry < ActiveRecord::Base 
    file_column :image 
end 

Tendrá que asegurarse de que el parámetro (nombre de campo de formulario) se corresponde con lo que se espera. Para el ejemplo anterior sería:

name="entry[image]" 

Además, asegúrese de que está haciendo un anuncio impreso de varias copias, no sólo la norma.

+1

También encontré que debe incluir [request setPostValue: @ "Create" forKey: @ "commit"]; – Chris