1. snaka

    Posted

    snaka
Changes in title
+rails console の tips
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,89 @@
+
+元ネタ:[Three quick Rails console tips by Nick of 37signals](http://37signals.com/svn/posts/3176-three-quick-rails-console-tips)
+
+
+## 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"
+```
+
+##リクエストを投げてコントローラを呼び出してみる。
+
+`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"
+```
+
+
+OpenStruct を使ってリクエストを偽装することで params 変数に値を設定することができる。
+
+