369
319

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rails console の tips

Last updated at Posted at 2013-03-26

元ネタ:

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
369
319
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
369
319

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?