2012-05-20 16 views
10

रेल में, मान लीजिए कि फ़ाइल पहले ही लोड हो चुकी है, कंसोल से इस उदाहरण से my_method पर कॉल करना संभव है?रेल में कंसोल से अनुप्रयोग नियंत्रक विधि को कॉल करना

# some_file.rb 
class MyClass < ApplicationController::Base 
    def my_method(args) 
+0

वह वास्तव में दिलचस्प लगता है। लेकिन मेरा पहला विचार यह होगा कि नियंत्रकों के अंदर सभी विधियों को दृश्यों द्वारा उपयोग किया जाता है।जब आप कंसोल तक पहुंचते हैं, तो आप ActiveRecord तक पहुंच रहे हैं और अपने मॉडल और उनके तरीकों तक पहुंच प्राप्त कर सकते हैं। जैसा कि मैंने कहा, यह मेरा पहला विचार होगा। – Daniel

+0

http://stackoverflow.com/q/151030/2355112 में एक ही मुद्दे के बारे में वास्तव में अच्छे जवाब हैं। – oozzal

उत्तर

27

ऐसा करने का एक और आसान तरीका ApplicationController का उदाहरण उपयोग करना है।

>> ApplicationController.new.example 

हो जाएगा ताकि उत्पादन निम्नलिखित:

ApplicationController < ActionController::Base 
    def example 
    "O HAI" 
    end 
end 

फिर कंसोल में, आप निम्न कर सकते

O HAI 

यह, ज़ाहिर है, का उपयोग नहीं होने के प्रतिबंध है सब कुछ एक सामान्य अनुरोध होगा, जैसे कि request ऑब्जेक्ट स्वयं।

यह संभव है कि आप के लिए बहुत बहुत देर हो चुकी है: यदि आप इस की जरूरत है, के रूप में पैट्रिक Klingemann सुझाव दिया है, तो आप डिबगर इस्तेमाल कर सकते हैं ... मैं व्यक्तिगत रूप से जिज्ञासा उपयोग करने की अनुशंसा , लेकिन उम्मीद है कि यह भविष्य में किसी की मदद करेगा।

+1

बहुत अच्छे समाधान, दृश्य लिखने में मदद, और नियंत्रक परीक्षण के मामले। –

3

उपयोग डिबगर:

अपने 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

+0

मैं वास्तव में डीबगिंग के बारे में भूल गया था। ध्यान दें कि आपको अपने सर्वर को लॉन्च करने की विधि तक पहुंच नहीं होगी। आपको यह करना होगा: रेल एस - डीबगर। और उस मामले में भी आपको प्राप्त होने वाली एकमात्र प्रतिक्रिया है "बस एक एप्लिकेशन नियंत्रक विधि दबाएं" ... कोई वास्तविक आउटपुट – Daniel

+0

मैंने सोचा था कि - डीबगर के रूप में मैंने सोया था, अच्छी बात। मुझे यकीन नहीं है कि मैं आपकी टिप्पणी में दूसरी वाक्य को समझता हूं। –

+0

अच्छी तरह से मैंने मार्टिन को हमारे लिए सेट अप करने का प्रयास करने की कोशिश की लेकिन मुझे जो संदेश मिलता है वह है ... मेरा मतलब है कि मैं वास्तव में यह नहीं कह सकता कि विधि के अंदर क्या हो रहा है जब मैं इसे कॉल करता हूं। हालांकि मैं कुछ गलत कर रहा हूं .. – Daniel

0

यह बिल्कुल सवाल नहीं पूछा गया है, लेकिन आप 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 टाइप करें, और अपने चर के साथ खेलें जो मुद्रित हो सकते हैं (केवल उन्हें टाइप करना) "वास्तविक समय" में!

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