खोज…


Carrierwave का उपयोग करके एकल फ़ाइल अपलोड

रेल अपलोड में फ़ाइल अपलोड का उपयोग करना काफी सरल है, पहली बात यह है कि आपको अपलोड अपलोड करने के लिए प्लगइन का चयन करना है। सबसे आम प्याज कैरियरवे और पेपरक्लिप हैं । दोनों कार्यक्षमता में समान हैं और प्रलेखन में समृद्ध हैं

उदाहरण के लिए Carrierwave के साथ सरल अवतार अपलोड छवि पर एक नजर डालते हैं

bundle install बाद Carrierwave, कंसोल में टाइप करें

$ rails generate uploader ProfileUploader

यह /app/uploaders/profile_uploader.rb पर स्थित एक कॉन्फ़िग फ़ाइल बनाएगा

यहां आप स्टोरेज सेट कर सकते हैं (यानी स्थानीय या क्लाउड), छवि जोड़तोड़ के लिए एक्सटेंशन लागू कर सकते हैं (यानी मिनीमैगिक के माध्यम से अंगूठे उत्पन्न कर सकते हैं) और सर्वर-साइड एक्सटेंशन सफेद सूची सेट करें

इसके बाद, user_pic के लिए स्ट्रिंग tipe के साथ नया माइग्रेशन बनाएं और user.rb मॉडल में इसके लिए अपलोडर माउंट करें।

mount_uploader :user_pic, ProfileUploader

अगला, अवतार अपलोड करने के लिए एक फॉर्म प्रदर्शित करें (उपयोगकर्ता के लिए एक संपादित दृश्य हो सकता है)

<% form_for @user, html: { multipart: true } do |f| %>
    <%= f.file_field :user_pic, accept: 'image/png, image/jpg' %>
    <%= f.submit "update profile pic", class: "btn" %>
<% end %>

आदेश को अपलोड करने की प्रक्रिया में {मल्टीपार्ट: ट्रू} को शामिल करना सुनिश्चित करें। क्लाइंट-साइड एक्सटेंशन व्हाइट-लिस्ट सेट करने के लिए एक्सेप्ट एक वैकल्पिक है।

एक अवतार प्रदर्शित करने के लिए, बस करो

<%= image_tag @user.user_pic.url %>

नेस्टेड मॉडल - कई अपलोड

यदि आप कई अपलोड बनाना चाहते हैं, तो पहली बात यह है कि आप नया मॉडल बनाना चाहते हैं और संबंध स्थापित कर सकते हैं

मान लें कि आप उत्पाद मॉडल के लिए एक से अधिक छवियां चाहते हैं। एक नए मॉडल बना सकते हैं और इसे बनाने के belongs_to अपने माता पिता के मॉडल

rails g model ProductPhoto

#product.rb
has_many :product_photos, dependent: :destroy
accepts_nested_attributes_for :product_photos

#product_photo.rb
belongs_to :product
mount_uploader :image_url, ProductPhotoUploader # make sure to include uploader (Carrierwave example)

स्वीकारें_नएस्टेड_न्टीजेन्सेस_फॉर है, क्योंकि यह हमें नेस्टेड फॉर्म बनाने की अनुमति देता है, इसलिए हम नई फाइल अपलोड कर सकते हैं, उत्पाद का नाम बदल सकते हैं और एक ही फॉर्म से कीमत निर्धारित कर सकते हैं।

अगला, एक दृश्य में फ़ॉर्म बनाएं (संपादित करें / बनाएं)

    <%= form_for @product, html: { multipart: true } do |product|%>

        <%= product.text_field :price # just normal type of field %>

        <%= product.fields_for :product_photos do |photo| # nested fields %>
            <%= photo.file_field :image, :multiple => true, name: "product_photos[image_url][]" %>
        <% end %>
        <%= p.submit "Update", class: "btn" %>
    <% end %>

नियंत्रक कुछ भी विशेष नहीं है, यदि आप एक नया बनाना नहीं चाहते हैं, तो बस अपने उत्पाद नियंत्रक के अंदर एक नया बनाएं

  # create an action
  def upload_file
    printer = Product.find_by_id(params[:id])
    @product_photo = printer.prodcut_photos.create(photo_params)
  end

  # strong params
  private
    def photo_params
      params.require(:product_photos).permit(:image)
    end

सभी छवियों को एक दृश्य में प्रदर्शित करें

    <% @product.product_photos.each do |i| %>
        <%= image_tag i.image.url, class: 'img-rounded' %>
    <% end %>


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow