rails console の tips

More than 1 year has passed since last update.

元ネタ:


urlヘルパーが生成するpath/urlを確認してみる。

appオブジェクトからURLヘルパーを呼び出すことができる。

[1] pry(main)> app.api_hoge_path

=> "/api/hoge"
[2] pry(main)> app.api_hoge_url
=> "http://www.example.com/api/hoge"

その他参考: Rails でリンクパスを生成する方法色々・・とRails console で 生成される path を確認したい時


リクエストを投げてコントローラを呼び出してみる。

appオブジェクトを使うと簡単にリクエストを投げてコントローラを呼び出すこともできる。

[3] pry(main)> app.get "http://localhost:3000/api/hoge"

=> 200
[4] pry(main)> app.response.body
=> "{\"response\":\"hoge\"}"


view ヘルパーを呼び出す

helperオブジェクトから View ヘルパーを呼び出すことができる。

[8] pry(main)> helper.truncate("Testing", length: 6)

=> "Tes..."
[9] pry(main)> helper.link_to "home", app.root_path
=> "<a href=\"/\">home</a>"


インスタンス変数に値を設定する

以下のように ヘルパーメソッドの中でインスタンス変数を参照している場合、Object#instance_variable_set を使ってインスタンス変数に値を設定することができる。

以下のようなヘルパーがあったとして

def say_hello

"hello, #{@name}"
end

@nameに値を設定するには以下のとおり

[99] pry(main)> helper.instance_variable_set :@name, "hoge"

これで 上記ヘルパーメソッドを呼び出すと

[99] pry(main)> helper.say_hello

=> "hello, hoge"

という結果が得られる。


params 変数に値をセットする

以下のようにヘルパーメソッドの中で params 変数を参照している場合、普通にhelper.say_goodbyeとメソッドを呼び出すと、params 変数の中身が空のため正しく動作しない。

def say_goodbye

"goobye, #{params[:name]}"
end

そのような場合、OpenStruct クラスを使ってコントローラを偽装することで params 変数に値を設定することができる。

[2] pry(main)> helper.controller = OpenStruct.new(:params => { :name => "hoge" })

=> #<OpenStruct params={:name=>"hoge"}>
[3] pry(main)> helper.say_goodbye
=> "goodbye, hoge"


sandboxモード

exit すると DBへの変更がロールバックされる

$ rails c --sandbox