रेल में, मान लीजिए कि फ़ाइल पहले ही लोड हो चुकी है, कंसोल से इस उदाहरण से my_method
पर कॉल करना संभव है?रेल में कंसोल से अनुप्रयोग नियंत्रक विधि को कॉल करना
# some_file.rb
class MyClass < ApplicationController::Base
def my_method(args)
रेल में, मान लीजिए कि फ़ाइल पहले ही लोड हो चुकी है, कंसोल से इस उदाहरण से my_method
पर कॉल करना संभव है?रेल में कंसोल से अनुप्रयोग नियंत्रक विधि को कॉल करना
# some_file.rb
class MyClass < ApplicationController::Base
def my_method(args)
ऐसा करने का एक और आसान तरीका ApplicationController
का उदाहरण उपयोग करना है।
>> ApplicationController.new.example
हो जाएगा ताकि उत्पादन निम्नलिखित:
ApplicationController < ActionController::Base
def example
"O HAI"
end
end
फिर कंसोल में, आप निम्न कर सकते
O HAI
यह, ज़ाहिर है, का उपयोग नहीं होने के प्रतिबंध है सब कुछ एक सामान्य अनुरोध होगा, जैसे कि request
ऑब्जेक्ट स्वयं।
यह संभव है कि आप के लिए बहुत बहुत देर हो चुकी है: यदि आप इस की जरूरत है, के रूप में पैट्रिक Klingemann सुझाव दिया है, तो आप डिबगर इस्तेमाल कर सकते हैं ... मैं व्यक्तिगत रूप से जिज्ञासा उपयोग करने की अनुशंसा , लेकिन उम्मीद है कि यह भविष्य में किसी की मदद करेगा।
बहुत अच्छे समाधान, दृश्य लिखने में मदद, और नियंत्रक परीक्षण के मामले। –
उपयोग डिबगर:
अपनेGemfile
ऐड में
:
gem 'debugger'
तो टर्मिनल से
:
> bundle
> rails s --debugger
नियंत्रक कार्रवाई में आप कम पड़ रहा है:
class WidgetsController < ApplicationController
def index
debugger
@widgets = Widget.all
respond_with @widgets
end
end
फिर अपने ब्राउज़र को इंगित करें: http://localhost:3000/widgets
, पृष्ठ लोड होने से समाप्त नहीं होगा। टर्मिनल पर लौटें जहां आपका सर्वर चल रहा है और आप एक इंटरैक्टिव डिबगिंग सत्र में होंगे जहां आप चला सकते हैं: my_method
मैं वास्तव में डीबगिंग के बारे में भूल गया था। ध्यान दें कि आपको अपने सर्वर को लॉन्च करने की विधि तक पहुंच नहीं होगी। आपको यह करना होगा: रेल एस - डीबगर। और उस मामले में भी आपको प्राप्त होने वाली एकमात्र प्रतिक्रिया है "बस एक एप्लिकेशन नियंत्रक विधि दबाएं" ... कोई वास्तविक आउटपुट – Daniel
मैंने सोचा था कि - डीबगर के रूप में मैंने सोया था, अच्छी बात। मुझे यकीन नहीं है कि मैं आपकी टिप्पणी में दूसरी वाक्य को समझता हूं। –
अच्छी तरह से मैंने मार्टिन को हमारे लिए सेट अप करने का प्रयास करने की कोशिश की लेकिन मुझे जो संदेश मिलता है वह है ... मेरा मतलब है कि मैं वास्तव में यह नहीं कह सकता कि विधि के अंदर क्या हो रहा है जब मैं इसे कॉल करता हूं। हालांकि मैं कुछ गलत कर रहा हूं .. – Daniel
यह बिल्कुल सवाल नहीं पूछा गया है, लेकिन आप pry
मणि के साथ डीबग भी कर सकते हैं, इसी तरह debugger
पर।
Gemfile
में जोड़ें:
gem "pry"
gem "pry-remote"
gem "pry-stack_explorer"
gem "pry-debugger"
अपने विधि में:
def myMethod
binding.pry
# some code
end
हो गया!
जब आप अपनी विधि चलाते हैं, तो पृष्ठ प्रसंस्करण binding.pry
पर स्थिर हो जाएगा और प्रिम प्रॉम्प्ट पर ले जाएगा। विधि के प्रत्येक नए चरण के लिए n
टाइप करें, और अपने चर के साथ खेलें जो मुद्रित हो सकते हैं (केवल उन्हें टाइप करना) "वास्तविक समय" में!
वह वास्तव में दिलचस्प लगता है। लेकिन मेरा पहला विचार यह होगा कि नियंत्रकों के अंदर सभी विधियों को दृश्यों द्वारा उपयोग किया जाता है।जब आप कंसोल तक पहुंचते हैं, तो आप ActiveRecord तक पहुंच रहे हैं और अपने मॉडल और उनके तरीकों तक पहुंच प्राप्त कर सकते हैं। जैसा कि मैंने कहा, यह मेरा पहला विचार होगा। – Daniel
http://stackoverflow.com/q/151030/2355112 में एक ही मुद्दे के बारे में वास्तव में अच्छे जवाब हैं। – oozzal