LoginSignup
4
4

More than 5 years have passed since last update.

Rails consoleを普段使わないけど使わないのはおかしいらしいので何の得があるか調べてみる

Posted at

今週から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 ->文字列が渡せるメソッドを探したけど、うなるほど表示されてるのでやめた。

感想

色々できるんだね。
もっと例題をやりたかった。
ほんとに色々できそうな気がする。
便利そうオーラを感じる。

4
4
0

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
4
4