2009-11-07 8 views
8

का उपयोग कर आईफोन से रेल पर रूबी पर अपलोड करना मैंने वास्तव में एक दीवार मारा है और मुझे कुछ मदद की ज़रूरत है! इसे पढ़ने के लिए धन्यवाद!ASIHTTPRequest

मैं एक ऐप लिखने के बीच में हूं जो डेटाबेस अनुरोधों के लिए मेरे आरओआर वेब-सर्वर से बात करता है और ActiveResource के लिए बहुत धन्यवाद देता है। लेकिन अब मुझे सर्वर पर फाइलें अपलोड करने की ज़रूरत है, और मैं एएसआईएचटीटीपीक्वेट का उपयोग करने की योजना बना रहा हूं जो बहुत अच्छा लग रहा है, मेरी समस्या हालांकि मुझे यकीन नहीं है कि आरओआर पक्ष पर POST अनुरोध कैसे सौंपना है ... मैं पेपरक्लिप का उपयोग कर रहा हूं लेकिन वास्तव में एक ईंट की दीवार मारा है।

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] 
..... 

लेकिन यह हमेशा विफल रहता है, मैं बहुत यकीन है कि इसे पोस्ट फॉर्म डेटासेट के साथ कुछ करना है, लेकिन मैं पूरी तरह से अटक गया हूं।

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'

किसी भी मदद की बहुत बहुत कृतज्ञता से प्राप्त किया जाएगा:

मैं त्रुटि हो रही है।

क्रिस

धन्यवाद!

उत्तर

1

पहली चीज जो मैं अपलोड करने के साथ जांचूँगा वह पैरामीटर नाम को फाइल_column (या जो कुछ भी, मैं व्यक्तिगत रूप से पेपरक्लिप का उपयोग करता हूं) की अपेक्षा कर रहा हूं।

आप की तरह कुछ है, तो: क्या उम्मीद है

class Entry < ActiveRecord::Base 
    file_column :image 
end 

तुम्हें यकीन पैरामीटर (प्रपत्र फ़ील्ड नाम) बनाने की आवश्यकता होगी मेल खाती है। उपर्युक्त उदाहरण के लिए यह होगा:

name="entry[image]" 

साथ ही, सुनिश्चित करें कि आप मानक नहीं बल्कि मल्टीपार्ट फॉर्म पोस्ट कर रहे हैं।

+1

मैंने यह भी पाया कि आपको [अनुरोध सेटपोस्टव्यू: @ "बनाएं" के लिए अनुरोध करना होगा: @ "प्रतिबद्ध"]; – Chris