2013-10-29 9 views
7

के उदाहरण बनाने के लिए एक सीएसवी अपलोड करें मेरे पास मेरे रूबी ऑन रेल एप्लिकेशन में एक सीधा आगे मॉडल है जो मेरे rails_admin उदाहरण में भी उपलब्ध है। Rails_admin के उपयोगकर्ताओं को प्रतिदिन आने और एक सीएसवी या एक्सएलएस फ़ाइल अपलोड करने की आवश्यकता होगी और कुछ तर्कों के आधार पर जो मैं बैकएंड पर प्रस्तुत करूंगा, जो सीएसवी/एक्सएलएस में कौन सा डेटा है, इस आधार पर मॉडल के उदाहरण बनाएंगे। मुझे फाइल सिस्टम पर सीएसवी या एक्सएलएस को जारी रखने की आवश्यकता नहीं है, इसलिए यह समस्या नहीं है। मुद्दा यह है कि, मुझे पूरी तरह से यकीन नहीं है कि rails_admin में एक इंटरफ़ेस कैसे प्राप्त किया जा सकता है जहां कोई उपयोगकर्ता CSV/XLS अपलोड कर सकता है, अपलोड हिट कर सकता है, और बैकएंड को बाकी का ख्याल रखना चाहिए।रेल व्यवस्थापक - एक मॉडल

क्या rails_admin के लिए इसका समर्थन है? क्या मैं इसके माध्यम से एक इंटरफेस बना सकता हूं जहां मैं अपने मॉडल में से किसी एक द्वारा प्रसंस्करण के लिए फाइल अपलोड कर सकता हूं?

+0

आप किस रत्न को अपलोड करने के लिए उपयोग कर रहे हैं? और आप वास्तव में क्या चाहते हैं। क्या आप फ़ाइल को बैक एंड में अपलोड करना चाहते हैं या सीएसवी/एक्सएलएस डेटा को बैक ग्राउंड में संसाधित करना चाहते हैं। –

+0

मैं बस फ़ाइल अपलोड करना चाहता हूं, और इसे पृष्ठभूमि में संसाधित करना चाहता हूं। फाइल को पोस्ट करने के समान सरल और फिर मैं एक एसिंक नौकरी सेट कर सकता हूं। मैं रेलवे व्यवस्थापक से सीधे इस फ़ाइल के साथ एक वर्ग के मॉडल या उदाहरणों का प्रबंधन नहीं कर रहा हूं। मुझे बस लोगों के माध्यम से इसे अपलोड करने का एक तरीका चाहिए। – randombits

+0

बहुत सारे तरीके से आप इसे कर सकते हैं। सबसे अच्छा तरीका सिर्फ पेपरक्लिप या वाहक तरंग मणि का उपयोग कर फ़ाइल अपलोड करें। तो रूबी को इसकी प्रक्रिया करने के लिए इसकी सीएसवी लाइब्रेरी है। और जब भी मणि या बस सरल जमीन पर इसे संसाधित करने के लिए धागा बनाते हैं। –

उत्तर

-1

this पर देखें आप देख सकते हैं कि आप कॉलबैक से क्या चाहते हैं उसे कॉल कर सकते हैं।

इसके अलावा आप अपने सीएसवी को संसाधित करने के लिए custom action बना सकते हैं।

या आप CSV आयात के लिए existing plugin का उपयोग कर सकते हैं।

3

आप RailsAdmin में एक कस्टम कार्रवाई कर सकते हैं जो अपलोड की गई फ़ाइल को प्राप्त करने और इसे संसाधित करने का प्रभारी होगा।

अपनी फ़ाइल एप्लिकेशन/व्यवस्थापक में

तो/your_model.rb आप की तरह कुछ जोड़ सकते हैं:

member_action :upload_csv, :method => :post do 
    # param[:file] will contain your uploaded file 
    # So add your logic here to open/parse the file 
    # Take a look at this link: http://railscasts.com/episodes/396-importing-csv-and-excel 
    end 

और अपने ध्यान में रखते हुए बस बहुखण्डीय विकल्प

<%= form_tag import_products_path, multipart: true do %> 
    <%= file_field_tag :file %> 
    <%= submit_tag "Import" %> 
<% end %> 
+2

आप ActiveAdmin के बारे में बात कर रहे हैं, लेकिन सवाल RailsAdmin के लिए है। – kuboon

4

ऐसा लग रहा है के साथ एक फार्म जोड़ने आपको एक कस्टम कार्रवाई और दृश्य बनाना पड़ सकता है। ऐसा करने का एक तरीका this custom actions plugin का उपयोग करना होगा। There is also a tutorial about how to build a custom action here. मैंने स्मारकसीएसवी का भी उपयोग किया, और यह शानदार ढंग से काम करता है।

रेल व्यवस्थापक के साथ एक कस्टम कार्रवाई रजिस्टर करने के लिए, आप config/initializers/rails_admin.rb में यह करना होगा:

module RailsAdmin 
    module Config 
    module Actions 
     class YourClass < RailsAdmin::Config::Actions::Base 
     RailsAdmin::Config::Actions.register(self) 

     ##code here, as explained more below 

     end 
    end 
    end 
end 

इस वर्ग में, आप the base actions में से किसी के वारिस कर सकते हैं। तो एक कस्टम आंशिक रजिस्टर करने के लिए, उस वर्ग में आप क्या करेंगे:

# View partial name (called in default :controller block) 
    register_instance_option :template_name do 
     :your_class 
    end 

आपका _your_class partials .. मैं भी शामिल नहीं कर रहा हूँ एप्लिकेशन/विचारों/rails_admin/मुख्य /, आप बहुखण्डीय साथ प्रपत्र संभाल कर सकते हैं में होना चाहिए आंशिक कोड, अगर आप मुझे स्विंग लेना चाहते हैं तो मुझे बताएं।

आप शायद भी मॉडल गुंजाइश पर अपनी कार्रवाई चाहते हैं:।

register_instance_option :controller do 
     Proc.new do 

     @order = Order.import(params[:file]) 
     f = SmarterCSV.process(file.tempfile) 
       f.each do |r| 

       #combine date and time fields 
       r[:date_time] = [r[:date],r[:time]].join(' ') 

       Order.create("date" => r[:date_time]) 
     end 
     end 
    end 
:

register_instance_option :collection? do 
     true 
    end 

और में अपने नियंत्रक कोड डाल यह शायद यहाँ उदाहरण के लिए प्रसंस्करण संभाल करने, सबसे अच्छा होगा

अगला, आपकी कार्रवाई RailsAdmin :: Config :: क्रियाओं के साथ पंजीकृत होनी चाहिए (यह कोड कॉन्फ़िगर/प्रारंभकर्ता/rails_admin.rb में रखा गया था):

module RailsAdmin 
    module Config 
    module Actions 
     class ApproveReview < RailsAdmin::Config::Actions::Base 
     RailsAdmin::Config::Actions.register(self) 
     end 
    end 
    end 
end 

अगला, कस्टम कार्रवाई को कॉन्फ़िगर/प्रारंभकर्ता/rails_admin में क्रिया कॉन्फ़िगरेशन में सूचीबद्ध करने की आवश्यकता है।आरबी:

RailsAdmin.config do |config| 
    config.actions do 
    dashboard 
    index 
    new 

    your_class 

    show 
    edit 
    delete 
    end 
end 

ट्यूटोरियल में और विवरण हैं, लेकिन मुझे लगता है कि यह एक सुंदर ठोस शुरुआत होनी चाहिए!

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