2012-12-11 11 views
8

मैं अपने उपयोगकर्ता पर एक अवतार संलग्न करने के लिए पेपर क्लिप का इस्तेमाल किया है, मेरे मॉडल में:,रेल पेपरक्लिप, संपादन फॉर्म file_field नहीं सौंपा

has_attached_file :avatar, 
    :styles => {square_tiny: '50x50#', square_small: '100x100#', square: '200x200#'} 

मैं एक रूप

<%= form_for(@user_profile, 
     :url => { :controller => :user_profiles, :action => :update_general_info, :id => @user_profile.id }, 
      :html => { :multipart => true, 
       :class=> "form-horizontal" }) do |f| %> 

      <div class="control-group"> 
       <%= f.label :avatar, :class => "control-label" %> 
       <div class="controls"> 
        <%= f.file_field :avatar %> 
       </div> 
      </div> 

.... 

<% end %> 

अपलोड सही काम करता है, लेकिन मैं वापस आ गया और अपने उपयोगकर्ता को संपादित करें, फ़ाइल फ़ील्ड कहता है 'कोई फ़ाइल नहीं चुनी गई'। और चूंकि मैं उस अवतार की उपस्थिति को मान्य कर रहा हूं, हर बार जब कोई उपयोगकर्ता अपना विवरण संपादित करता है, तो उसे अपना अवतार फिर से अपलोड करना होगा ...

मैं इसके आसपास कैसे काम करूं?

मैंने सोचा कि :multipart => true मदद करेगा लेकिन ऐसा नहीं हुआ।

+0

क्या आपने इस समस्या को हल किया है? –

उत्तर

5

किसी पृष्ठ के लिए फ़ाइल फ़ील्ड में मान सेट करने का बिल्कुल अच्छा तरीका नहीं है, और यह सुरक्षा कारणों से है।

यदि ब्राउज़र ने किसी पृष्ठ या जेएस स्क्रिप्ट को किसी फ़ाइल फ़ील्ड में मान सेट करने की अनुमति दी है जो किसी दुर्भावनापूर्ण पृष्ठ को कुछ फ़ील्ड या पासवर्ड फ़ाइल के साथ फ़ाइल फ़ील्ड मान को प्रीसेट करने की अनुमति देगी। और यह एक विशाल सुरक्षा छेद होगा।

मैं उस मामले में क्या करता हूं, क्या मैं पहले से सहेजी गई फ़ाइल को एक लिंक के रूप में प्रदर्शित करता हूं जिसे उपयोगकर्ता डाउनलोड करने के लिए क्लिक कर सकता है। इसके बाद आप हटाने के लिए छोटे AJAX लिंक प्रदान कर सकते हैं (फ़ाइल को AJAX कॉल के साथ हटा दिया गया है और लिंक एक नई फ़ाइल इनपुट के साथ प्रतिस्थापित किया गया है) और प्रतिस्थापित करें (लिंक को फ़ाइल इनपुट के साथ प्रतिस्थापित किया गया है)।

आपका अंतिम विकल्प फ़ाइल अपलोड करने के लिए AJAX का उपयोग करना होगा। यदि आप फ़ाइल अपलोड के लिए AJAX का उपयोग करते हैं तो आप एक छिपे हुए फ्रेम पर पोस्ट करेंगे ताकि फ़ाइल इनपुट अपना चयनित मान रखे। किसी भी तरह से ध्यान रखें कि फ़ाइल फ़ील्ड मान में कोई भी परिवर्तन उपयोगकर्ता द्वारा शुरू किया जाना चाहिए।

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

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