Railsコンソールを使ってコントローラのなかで色々試す
Railsのコントローラの中ではいろいろなヘルパーメソッドが使えますが、コードを書く際にRailsコンソールを起動してトライアンドエラーで試してみたいことがよくあります。
今まではrails serverを起動してソースコードに一時的にdebuggerやbinding.pryを記述することで停止させていたのですが、一時的でもソースコードにすぐ不要になるコードを書くのは気持ち悪いものですし、うっかりcommit、pushしてしまうとかなりしょんぼりです。
ソースコードを書き換えずにRailコンソールから止める方法を考えてみました。
Rails consoleからdebuggerを起動してブレークポイントを設定する
ここまでは簡単です。
$ bundle exec rails c > debugger (rdb:1) b HomeController.index (rdb:1) c >
最後にc(ontinue)コマンドでデバッガから抜けてconsoleに戻っています。
コントローラを呼ぶリクエストを実行する
続いて目的のコントローラを実行します。Railsコンソールにはappヘルパーがあって、直接リクエストを呼ぶことができます。HomeController#indexがrootにルーティングされているなら、getメソッドを使って
> app.get '/' Breakpoint 1 at HomeController:index /path/to/repository/app/controllers/home_controller.rb:8 def index (rdb:1)
これで、Controller内のconsoleで実験できるようになりました。
コントローラの中でコンソールを使ってみる
例えばクッキーを操作するcookiesヘルパーを試してみます。
(rdb:1) p cookies.signed[:hoge] = ['a','b','c'] ["a", "b", "c"] (rdb:1) p cookies[:hoge] "BAhbCEkiBmEGOgZFVEkiBmIGOwBUSSIGYwY7AFQ=--3dd62e6bec43666604256e897ca65b925d4bb7f1" (rdb:1) p cookies.signed[:hoge] ["a", "b", "c"] (rdb:1)
この方法ならステージング環境のRailsコンソールでもいろいろな確認ができそうです。