के साथ एकाधिक छवि अपलोड मैं रेल 3 में ड्रैगनफ्लाई के साथ एकाधिक छवि अपलोड करने की कोशिश कर रहा था। मैंने कुछ ट्यूटोरियल की खोज की, लेकिन कोई भी नहीं मिला। मैं Carrierwave साथ एकाधिक छवि अपलोड करने के लिए एक ट्यूटोरियल पाया है, लेकिन ड्रैगनफ्लाई साथ भाग्य .. किसी भी मदद :) कृपया लगता है सकेड्रैगनफ्लाई
उत्तर
प्रस्तावना, paperclip के समान
Dragonfly ही सामान्य रूप में अपनी परियोजना के लिए मीडिया प्रबंधन करने के लिए इस्तेमाल किया जा सकता । प्रश्न खुद रेल आवेदन के भीतर एकाधिक फ़ाइल अपलोड पर उबाल जाता है। इस विषय पर कुछ ट्यूटोरियल उपलब्ध हैं, जिन्हें ड्रैगनफ्लाई का उपयोग करके मॉडलों को आसानी से अनुकूलित किया जा सकता है ताकि उन पर विशिष्ट फाइलों को संग्रहित किया जा सके। मैं सुझाव दूंगा कि आप उनको देखें और उन्हें अपनी परियोजना के लिए अनुकूलित करने का प्रयास करें।
हालांकि, मैं वर्तमान में विकास में एक रेल 3.2 ऐप के लिए बनाया गया एक न्यूनतम उदाहरण प्रस्तुत कर सकता हूं, जो सही नहीं है (उदाहरण के लिए सत्यापन प्रबंधन), लेकिन आपको कुछ शुरुआती बिंदु दे सकता है।
उदाहरण
बस संदर्भ के लिए, आवश्यक विचार here से लिया जाता है। यह उदाहरण रेल 3.2.x के साथ किया जाता है।
मान लें कि आपके पास छुट्टी डेटाबेस है, जहां उपयोगकर्ता अपनी छुट्टियों पर यात्रा रिपोर्ट बना सकते हैं। वे एक छोटे से विवरण, साथ ही कुछ तस्वीरें छोड़ सकते हैं।
के दौरे के लिए एक सरल ActiveRecord आधारित मॉडल का निर्माण करके बाहर शुरू, बस इसे Trip
अब के लिए कॉल की सुविधा देता है:
class Trip < ActiveRecord::Base
has_many :trip_images
attr_accessible :description, :trip_images
end
आप देख सकते हैं, मॉडल यात्रा छवियों इसे करने के लिए एक has_many
संघ के माध्यम से जुड़ा हुआ है।
class TripImage < ActiveRecord::Base
attr_accessible :content, :trip_id
belongs_to :trip_id
image_accessor :content
end
यात्रा छवि यह स्वयं भंडार फ़ाइल अनुलग्नक: TripImage
मॉडल है, जो सामग्री क्षेत्र में संग्रहीत फ़ाइल होने के लिए ड्रैगनफ्लाई का उपयोग करता है पर एक नज़र है करने देता है। आप इस मॉडल के भीतर कोई भी प्रतिबंध लगा सकते हैं, उदा। फ़ाइल आकार या माइम प्रकार।
के एक TripController
जो एक new
और create
कार्रवाई है बनाएँ (आप मचान के माध्यम से इस उत्पन्न कर सकते हैं यदि आप चाहें तो यह कहीं फैंसी कुछ भी नहीं कर रहा है): यहां
class TripController < ApplicationController
def new
@trip = Trip.new
end
def create
@trip = Trip.new(params[:template])
#create the images from the params
unless params[:images].nil?
params[:images].each do |image|
@trip.trip_images << TripImages.create(:content => image)
end
if @trip.save
[...]
end
end
कुछ भी नहीं विशेष, बनाने के अपवाद के साथ params
हैश से दूसरी प्रविष्टि की छवियां। इस समझ में आता है जब new.html.erb
टेम्पलेट फ़ाइल के भीतर फाइल अपलोड क्षेत्र को देख (या आंशिक आप Trip
मॉडल पर क्षेत्रों के लिए उपयोग में):
[...]
<%= f.file_field :trip_images, :name => 'images[]', :multiple => true %>
[...]
इस पल के लिए काम करना चाहिए, हालांकि, देखते हैं इस समय छवियों के लिए कोई सीमा नहीं है।आप एक custom validator के माध्यम से सर्वर साइड पर छवियों की संख्या सीमित कर सकते हैं Trip
मॉडल पर:
class Trip < ActiveRecord::Base
has_many :trip_images
attr_accessible :description, :trip_images
validate :image_count_in_bounds, :on => :create
protected
def image_count_in_bounds
return if trip_images.blank?
errors.add("Only 10 images are allowed!") if trip_images.length > 10
end
end
मैं तुम्हें करने के लिए इस को खुला छोड़ देते हैं, लेकिन आप भी फ़ाइल मैदान पर ग्राहक के पक्ष सत्यापन इस्तेमाल कर सकते हैं, सामान्य विचार होगा (CoffeeScript में) फ़ाइल क्षेत्र बदल रहा है पर फ़ाइलों की जाँच करने के लिए किया:
jQuery ->
$('#file_field_id').change() ->
#disable the form
for file in this.files
#check each file
#enable the form
सारांश
आप मौजूदा ट्यूटोरियल से बाहर एक बहुत का निर्माण कर सकते हैं, के रूप में ड्रैगनफ्लाई अन्य समाधान जब के लिए अलग तरह कि व्यवहार न करे यह फ़ाइलों को अपलोड करने के लिए बस पर आता है। हालांकि, अगर आप कुछ फैनसीयर चाहते हैं, तो मैं jQuery Fileupload का सुझाव दूंगा, जैसा कि कई अन्य मेरे सामने हैं।
वैसे भी, मुझे उम्मीद है कि मैं कुछ अंतर्दृष्टि प्रदान कर सकता हूं।
एलजी,
Flo
- 1. ड्रैगनफ्लाई
- 2. ओपेरा ड्रैगनफ्लाई बनाम फायरबग
- 3. छवियों को ऐप/asssets पर कब और जब रेल/में/सार्वजनिक/छवियों को छवियों को रखना है?
- 4. क्या कोई लाइन निर्धारित करने का कोई तरीका है जिससे एक्सएचआर फायरबग या वेब इंस्पेक्टर में जारी किया गया था?
- 5. छवि 3 डी पर अपलोड पर भ्रष्टाचार, केवल उत्पादन। (कैरियरवेव, इंजनयार्ड)
- 6. रेल 3 + JQuery-फ़ाइल-अपलोड + नेस्टेड मॉडल
- 7. .attr ('चेक', 'चेक') काम नहीं करता
- 8. एस 3
- 9. getHours() गलत मान लौटा रहा है
- 10. ओपेरा कुछ जावास्क्रिप्ट फ़ाइलों को लोड नहीं करेगा