2009-11-07 11 views
8

Gerçekten bir duvara çarptım ve biraz yardıma ihtiyacım var! Bu kadar okumak için teşekkür ederim!ASIHTTPRequest kullanarak iPhone'dan Ruby on Rails'e yükleme

Veritabanı istekleri için ROR web sunucumla görüşen ve ActiveResource sayesinde çok iyi çalışan bir uygulamanın yazıyorum. Ama şimdi sunucuya da dosya yüklemem gerekiyor ve ASIHTTPRequest'i kullanmayı çok iyi görüyorum. Sorunum olsa da sadece ROR tarafında POST isteğini nasıl alacağımı bilemiyorum ... Kağıt kullanıyorum ama gerçekten bir tuğla duvara çarptı. Sadece yazıyorum ASIHTTP tarafında

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

ve ben yapıyorum yakut tarafında

...

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

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

Ama her zaman başarısız, ben eminim POST form veri kümesi ile ilgili bir şey var, ama tamamen sıkışmış. Herhangi bir yardım çok çok gratefully alınan

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'

:

Şu hatayı alıyorum.

Chris

teşekkürler!

cevap

1

Yüklemeyi yaptığım ilk şey, parametre ismini file_column (veya Paperclip'i ne olursa olsun kişisel olarak kullanırım) beklediğiyle değiştirmektir.

class Entry < ActiveRecord::Base 
    file_column :image 
end 

emin parametresi (form alanı adı) yapmak gerekir tekabül beklenenin: Eğer böyle bir şey varsa

. Yukarıdaki örnek için bu olurdu:

name="entry[image]" 

Ayrıca, bir çok parçalı formu yazısı değil, sadece standart yapıyoruz emin olun.

+1

Ayrıca şunu eklemelisiniz: [request setPostValue: @ "Create" forKey: @ "commit"]; – Chris