2009-11-07 8 views
8

Naprawdę uderzyłem w ścianę i potrzebuję pomocy! Dziękuję za przeczytanie tego tak daleko!Przesyłanie do Ruby on Rails z iPhone'a za pomocą ASIHTTPRequest

Jestem w trakcie pisania aplikacji, która rozmawia z moim serwerem ROR dla żądań bazy danych i działa dzięki ActiveResource. Ale teraz muszę również przesłać pliki na serwer, a ja zamierzam użyć ASIHTTPRequest, który wygląda świetnie, ale mój problem polega na tym, że nie jestem po prostu pewien, jak przekazać żądanie POST po stronie ROR ... Używam spinacza ale naprawdę uderzyły w mur.

Na stronie ASIHTTP ja po prostu pisząc:

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

a po stronie rubinowym robię ...

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

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

Ale to nie zawsze, jestem całkiem pewny, ma to coś wspólnego z zbiorem danych POST, ale całkowicie utknąłem.

Dostaję błąd:

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'

Każda pomoc będzie bardzo wdzięcznie przyjmowane.

Chris

Dzięki!

Odpowiedz

1

Pierwszą rzeczą, którą sprawdziłbym przy przesyłaniu, jest ustawienie nazwy parametru na kolumnę file_column (lub cokolwiek, osobiście użyłbym Paperclip).

Jeśli masz coś takiego:

class Entry < ActiveRecord::Base 
    file_column :image 
end 

Musisz upewnić się, że parametr (formularz nazwę pola) odpowiada, czego oczekuje. W powyższym przykładzie będzie to:

name="entry[image]" 

Upewnij się również, że robisz wieloczęściowy post, a nie tylko standard.

+1

Stwierdziłem również, że musisz uwzględnić [request setPostValue: @ "Create" forKey: @ "commit"]; – Chris