今週からhiraokashiさんにメンタリングを受けていて、
宿題をもらっているのでその1つRails consoleの使い方について調べたことを書きます。
http://qiita.com/snaka/items/eeb5dee96e44fca54a2e
の記事で試したことを書きます。記事を書いてくれたヒトありがとうございます。
###urlヘルパーが生成するpath/urlを確認してみる。
[13] pry(main)> app.new_users_path
"/users/new" -> pathが取れる
[14] pry(main)> app.new_users_url
"http://www.example.com/users/new" -> フルpathがとれる
疑問: なんとなく使ってる〜pathという書き方はなんの事なのか?
###リクエストを投げてコントローラを呼び出してみる。
[16] pry(main)> app.get "http://localhost:3000/users/new"
...
...
Completed 200 OK in 1434ms (Views: 1074.2ms | ActiveRecord: 216.0ms)
-> すごい。complete 200 が返ってくる。こんな事を試せるとは知らなかった。
[17] pry(main)> app.response.body
-> 大量のデータが帰ってきた。見た感じHTMLだけど、どのHTMLのbodyだろう?
users/new のbodyだな。なぜusers/newをさっき打ったことを知ってるんだ?
###view ヘルパーを呼び出す
truncate -> 文字を切り捨てる。デフォルトだと30文字。
使い方: truncate(文字列 [, オプション])
[22] pry(main)> helper.truncate("testing", length: 6)
"tes..." -> なんのことかわからない。
[24] pry(main)> helper.link_to "top", app.root_path
"<a href=\"/\">top</a>" -> これもわからない。
###インスタンス変数に値を設定する
[1] pry(main)> def say_hello
[1] pry(main)* "hello, #{@name}"
[1] pry(main)* end
:say_hello
[2] pry(main)> helper.instance_variable_set :@name, "hoge"
"hoge"
[3] pry(main)> helper.say_hello
NoMethodError: private method `say_hello' called for #<ActionView::Base:0x007f93ce6f34c0>
from (pry):5:in `<main>'
[4] pry(main)> helper.instance_variable_set @name, "hoge"
TypeError: is not a symbol or string -> セミコロンを外してみたら必要だった from (pry):6:in `instance_variable_set'
[5] pry(main)> helper.instance_variable_set :@name, "hoge"
"hoge"
[6] pry(main)> helper.say_hello
NoMethodError: private method `say_hello' called for #<ActionView::Base:0x007f93ce6f34c0> -> メソッドがないそうなので他のメソッドで試す
from (pry):8:in `<main>'
[7] pry(main)> helper.methods -> full_titleというのが使いやすそうなのでこれにする
[8] pry(main)> helper.full_title
ArgumentError: wrong number of arguments (0 for 1) ->引数が足りないそうだ。右側が正しい数なんだな、初めて確認できた。何度か調べたけどあいまいだった。しれてよかった。
from /home/ycoda/workspace/recipe/app/helpers/application_helper.rb:2:in `full_title'
[9] pry(main)> helper.full_title("top-page")
"top-page | レシピ" ->おぉ
###params 変数に値をセットする
[13] pry(main)> def say_goodbye
[13] pry(main)* "goodbye, #{params[:name]}
[13] pry(main)* end
[13] pry(main)* helper.controller = OpenStruct.new(params: { name: "hoge"}} -> 無反応。この書き方がダメなんだろう。古い書き方で書くか。
[13] pry(main)*
[13] pry(main)* helper.controller = OpenStruct.new(:params => { :name => "hoge"}} ->無反応。なんで?
[13] pry(main)* helper.controller = OpenStruct.new(:params => { :name => "hoge"})
[13] pry(main)* helper.controller = OpenStruct.new(:params => { :name => "hoge" })
[13] pry(main)* helper.say_goodbye ->無反応。おかしいね。なにかが違う。
[13] pry(main)*
[13] pry(main)>
[13] pry(main)>
[14] pry(main)> helper.controller = OpenStruct.new(:params => { :name => "hoge" }) ->最後のカッコが丸括弧になってなかった。だから赤く光ってたのか。なるほど。
OpenStruct {
:params => {
:name => "hoge"
}
} ->とれたね。
[15] pry(main)> helper.say_goodbye
NoMethodError: undefined method `say_goodbye' for #<ActionView::Base:0x007f93ce6f34c0>
from (pry):13:in `<main>' ->だめらしいね。
[16] pry(main)> def say_goodbye ->もう一回最初からやってみよう
[16] pry(main)* "say_goodbye, #{params[:name]}
[16] pry(main)* end
[16] pry(main)* helper.say_goodbye
[16] pry(main)*
[16] pry(main)> helper.say_goodbye
NoMethodError: undefined method `say_goodbye' for #<ActionView::Base:0x007f93ce6f34c0>
from (pry):14:in `<main>' ->だめらしいね。
[17] pry(main)> def say_goodbye
[17] pry(main)* "say_goodbye, #{params[:name]}
[17] pry(main)* end
[17] pry(main)* helper.controller = OpenStruct.new(:params => { :name => "hoge" })
[17] pry(main)*
[17] pry(main)> helper.controller = OpenStruct.new(:params => { :name => "hoge" })
OpenStruct {
:params => {
:name => "hoge"
}
}
[18] pry(main)> helper.say_goodbye
NoMethodError: undefined method `say_goodbye' for #<ActionView::Base:0x007f93ce6f34c0> ->見返したらメソッドの中身の文字列のクォーテーションで括って無かった個に気づく。もっかいやってみる。
from (pry):16:in `<main>'
[19] pry(main)> def say_goodbye
[19] pry(main)* "say_goodbye, #{params[:name]}"
[19] pry(main)* end
:say_goodbye ->いいね!
[20] pry(main)> helper.controller = OpenStruct.new(:params => { :name => "hoge" })
OpenStruct {
:params => {
:name => "hoge"
}
} ->いいね!
[21] pry(main)> helper.say_goodbye
NoMethodError: private method `say_goodbye' called for #<ActionView::Base:0x007f93ce6f34c0>
from (pry):21:in `<main>' ->だめらしいね。
[22] pry(main)>
[23] pry(main)>
[24] pry(main)> def say_goodbye ->もう一回だけやってみる
[24] pry(main)* "say_goodbye, #{params[:name]}"
[24] pry(main)* end
:say_goodbye
[25] pry(main)> helper.controller = OpenStruct.new(:params => { :name => "hoge" })
OpenStruct {
:params => {
:name => "hoge"
}
}
[26] pry(main)> helper.say_goodbye
NoMethodError: private method `say_goodbye' called for #<ActionView::Base:0x007f93ce6f34c0>
from (pry):26:in `<main>' ->やっぱだめなのね。
[27] pry(main)> helper.sign_in(:name) ->サインインというメソッドがあったはず。引数は何渡すか覚えてないけど。
NoMethodError: undefined method `[]=' for nil:NilClass ->配列?どーゆういみ?
from /home/ycoda/workspace/recipe/app/helpers/sessions_helper.rb:9:in `sign_in'
[28] pry(main)> helper.methods ->文字列が渡せるメソッドを探したけど、うなるほど表示されてるのでやめた。
###感想
色々できるんだね。
もっと例題をやりたかった。
ほんとに色々できそうな気がする。
便利そうオーラを感じる。