2012-05-20 7 views
10

Railsでは、ファイルが既にロードされていると仮定して、コンソールからこの例のmy_methodをどのように呼び出すことができますか?RailsのConsoleからApplicationControllerメソッドを呼び出す

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

実際は興味深いように聞こえますが、私の最初の考えは、コントローラ内のすべてのメソッドがビューによってアクセスされるということです。コンソールにアクセスすると、ActiveRecordにアクセスして、モデルとそのメソッドにアクセスできます。私が言ったように、これが私の最初の考えです。 – Daniel

+0

http://stackoverflow.com/q/151030/2355112同じ問題に関して本当に良い回答があります。 – oozzal

答えて

27

もう1つ、非常に簡単な方法は、ApplicationControllerというインスタンスを使用することです。

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

その後コンソールで、次の操作を行うことができます

>> ApplicationController.new.example 

この意志の出力は次のよう

O HAI 

これを、当然のことながら、アクセス権を持っていないの制限がありますrequestオブジェクト自体のような、通常の要求になるすべてのものに適用されます。

これはあなたのための非常に遅すぎる可能性があります:あなたはこれを必要とする場合はパトリックKlingemannが示唆したように、デバッガを使用することができます...私は個人的に使用してPRYをお勧めしますうまくいけば、将来誰かを助けるだろう。

+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

私は実際にデバッグを忘れてしまいました。そのようなサーバーを起動するメソッドにアクセスすることはできません。あなたは次のことをする必要があります:rails s --debugger.And場合でも、あなたが得る唯一の応答は "ちょうどApplicationControllerメソッドを打つ"です...実際の出力なし – Daniel

+0

私は眠りに行った - いい視点ね。私はあなたのコメントの2番目の文を理解しているか分からない。 –

+0

私は私たちのために設定されたケースマテリアルを再現しようとしましたが、私が得るのはそのメッセージです...私はそれを呼び出すと実際に何が起こっているのかを実際に確認することはできません。 。 – Daniel

0

これはまさに質問された質問ではありませんが、debuggerと同様にpry宝石でデバッグすることもできます。 Gemfile

追加:あなたの方法では

gem "pry" 
gem "pry-remote" 
gem "pry-stack_explorer" 
gem "pry-debugger" 

def myMethod 
    binding.pry 
    # some code 
end 

を完了!

メソッドを実行すると、ページ処理はbinding.pryでフリーズし、プロンプトが引き継がれます。メソッドの新しいステップごとに「n」と入力し、「リアルタイム」で印刷可能な変数を使用して遊んでください。

関連する問題