2013-01-09 31 views
8

मेरे पास एक आर्टवर्क मॉडल है जिसमें एक छवि विशेषता है जहां कैरियरवेव घुड़सवार है। नियंत्रक चश्मे लिखते समय मुझे एहसास हुआ कि छवि क्षेत्र रिक्त रहता है, भले ही मैंने सोचा कि मैं एक फ़ाइल ऑब्जेक्ट में गुज़र रहा था।नियंत्रक में कैरियरवेव-घुड़सवार मॉडल में पास करने के लिए मुझे किन पैरामीटर की आवश्यकता है?

मेरी डीबग जानकारी मुझे बताती है कि समस्या उस छवि विशेषता के साथ है जिसमें मेरे पास कैरियरवेव घुड़सवार है, और कुछ और नहीं। मुझे नहीं लगता कि मैं अपनी आवश्यक जानकारी में गुजर रहा हूं, लेकिन मुझे नहीं पता कि क्या प्रयास करना है।

def create 
    @artwork = @imageable.artworks.new(params[:artwork]) 
    logger.debug "Artwork should be valid: #{@artwork.valid?}" 
    logger.debug "Errors: #{@artwork.errors.full_messages}" 
    if @artwork.save 
     flash[:success] = "Artwork created." 
     redirect_to [@imageable, :artworks] 
    else 
     flash[:error] = "Artwork not created." 
     render :new 
    end 
end 

परीक्षण लॉग मेरे चश्मा चलाने के बाद मैं इस देखें:: कृपया

Processing by ArtworksController#create as HTML 
    Parameters: {"artwork"=>{"image"=>"#<File:0x4515480>", "title"=>"Portrait","year"=>"2012", "surface_type"=>"canvas", "size"=>"10 x 10", "price"=>"100.0", "for_sale"=>false, "prints_available"=>false, "notes"=>"extra notes"}, "file"=>"#<File:0x46c6938>", "originals_gallery_id"=>"1"} 
[1m[36mOriginalsGallery Load (0.0ms)[0m [1mSELECT "originals_galleries".* FROM "originals_galleries" WHERE "originals_galleries"."id" = ? LIMIT 1[0m [["id", "1"]] 
Artwork should be valid: false 
Errors: ["Image can't be blank"] 

किसी भी विचारों,

यहाँ नियंत्रक कार्रवाई कुछ डिबग जानकारी के साथ इस समस्या की पहचान करने के लिए? क्या कोई नियंत्रक परम है जिसे मैं सेट करना भूल रहा हूं?

उत्तर

17

मेरी समस्या एक सामान्य सामान्य थी: मेरे परीक्षणों के दौरान (रुपेक और फैक्ट्रीगर्ल के साथ) मैं नियंत्रक कार्रवाई में गलत प्रकार की फ़ाइल ऑब्जेक्ट में गुज़र रहा था।

FactoryGirl.define do 
    factory :artwork do 
    image { File.open(File.join(Rails.root, 'spec', 'support', 'sample.gif')) } 
    ...other attributes omitted 
    end 
end 

The above is the setup that Carrierwave docs recommended for FactoryGirl test fixtures. यह मॉडल और सबसे नियंत्रक कार्यों के परीक्षण के लिए काम किया, लेकिन नहीं कार्रवाई बनाने के लिए: इस वस्तु की तरह मैं मेरी छवि विशेषता के लिए परिभाषित करने गया था।

मेरे परीक्षण लॉग मुझे बता रहे थे कि इस फ़ाइल ऑब्जेक्ट में गुजरने के बावजूद मेरी छवि विशेषता खाली थी। कुछ खोज के बाद मुझे पता चला कि आप रैक :: टेस्ट :: अपलोडेडफाइल के उदाहरण में गुजर सकते हैं (मुझे लगता है कि एक्शनडिस्पाच :: एचटीपी :: अपलोडेडफाइल ब्राउज़र (?) के माध्यम से सबमिट किया गया है)।

तो image विशेषता के बजाय कारखाने में File.open(...) पर सेट किया जा रहा है, मैंने इसे Rack::Test::UploadedFile.new(Rails.root.join("spec/support/sample.gif")) पर सेट किया है। मेरा नियंत्रक चश्मा पास हो गया और फ़ाइल अपलोड डेटाबेस में सहेजा गया था।

मुझे लगता है कि यह समझाने में मदद करता है कि बहुत से लोग ब्राउज़र में सफल फ़ाइल अपलोड क्यों देखते हैं, लेकिन उनके परीक्षण या सत्यापन में नहीं।

This post about testing file attachments in Rails 3 really helped

+0

एक ही समस्या को हल करने की कोशिश कर रहा था। बहुत - बहुत धन्यवाद! – wyclin

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^