2011-03-05 16 views
20

पर पैरामीटर या दो पास करना मेरे पास एक रेक कार्य है जिसे मैं पैरामीटर पास करना चाहता हूं। , सहीएक रेक कार्य

... 
cust = Customer.find(the_id_passed_in) 
# do something with this customer record, etc... 
... 

सुंदर सरल: उदाहरण के लिए, मैं

<prompt> rake db:do_something 1 

की तरह और रेक कार्य के अंदर कोई आदेश जारी करना चाहते हैं?

+2

संभव डुप्लिकेट [मैं कैसे एक रेक कार्य करने के लिए आदेश पंक्ति तर्क पारित करते हैं?] (Http://stackoverflow.com/questions/825748/कैसे-करें-i-pass-command-line-arguments-to-a-rake-task) –

उत्तर

38

रेक रेक आदेश स्वीकार करते हैं और परिभाषित करते हैं, ठीक है, सुंदर नहीं है।

अपने कार्य को इस तरह से कॉल करें:

<prompt> rake db:do_something[1,2] 

मैं दिखाने के लिए कि आप अल्पविराम की आवश्यकता होगी एक दूसरा पैरामीटर चुके हैं, लेकिन किसी भी रिक्त स्थान छोड़ देते हैं।

और यह इस तरह परिभाषित करते हैं: पैरामीटर प्रदान करने के

task :do_something, :arg1, :arg2 do |t, args| 
    args.with_defaults(:arg1 => "default_arg1_value", :arg2 => "default_arg2_value") 
    # args[:arg1] and args[:arg2] contain the arg values, subject to the defaults 
end 
+1

आप ऐसा कार्य कैसे करते हैं जिसके लिए रेल वातावरण को लोड किया जाना आवश्यक है? जैसे आम तौर पर 'कार्य: do_something =>: पर्यावरण करते हैं' – Duke

+10

'कार्य: do_something, [: arg1,: arg2] =>: पर्यावरण do | t, args |' – Duke

+2

मुझे लगता है कि आप वहां एक और कॉमा चाहते हैं: 'कार्य: do_something, : arg1' ... –

0

है, यह बेहतर है विकल्प कोई इनपुट फ़ाइल है, यह हो सकता है एक एक्सेल एक json या जो भी आप की जरूरत है और वहाँ से डेटा संरचना और चर पढ़ा आपको इसकी जरूरत है वैरिएबल नाम सहित आवश्यकता है। फ़ाइल पढ़ने के लिए निम्न संरचना हो सकती है।

namespace :name_sapace_task do 
    desc "Description task...." 
     task :name_task => :environment do 
     data = ActiveSupport::JSON.decode(File.read(Rails.root+"public/file.json")) if defined?(data) 
    # and work whit yoour data, example is data["user_id"] 

    end 
    end 

उदाहरण json

{ 
    "name_task": "I'm a task", 
    "user_id": 389, 
    "users_assigned": [389,672,524], 
    "task_id": 3 
} 

निष्पादन

rake :name_task 
की
+1

आप [दो समान उत्तरों] क्यों देते हैं (http://stackoverflow.com/a/22070576/861716)? एक प्रश्न का उत्तर देना और दूसरे को डुप्लिकेट के रूप में चिह्नित करना बेहतर है। –

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