rails-tutorial第4章


helperメソッドとは

便利そうなメソッドをhelperに定義しておいてそれを呼び出す。

app/helpers/application_helper.rb
module ApplicationHelper

  # ページごとの完全なタイトルを返します。
  def full_title(page_title = '')
    base_title = "Ruby on Rails Tutorial Sample App"
    if page_title.empty?
      base_title
    else
      page_title + " | " + base_title
    end
  end
end

これにより、page_titleが空の場合は、縦棒をいれずにbase_titleだけをタイトルタグに入れることができる。

app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
  <head>
    <title><%= full_title(yield(:title)) %></title>
    <%= csrf_meta_tags %>
    <%= stylesheet_link_tag    'application', media: 'all',
                               'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application',
                               'data-turbolinks-track': 'reload' %>
  </head>
  <body>
    <%= yield %>
  </body>
</html>

titleタグを先ほどhelperに定義したdef full_title(page_title = '')を使って実装している。
yield(:title)によりprovide(:title, "About")のように定義したタイトルを参照できる。
provideとyieldはセットで考える。

pry

irbを拡張したものとしてpryという機能がある。
これはgemをインストールすることで使うことができる。

$ gem intall pry
$ pry

このコマンドにより、pryを使える。

putsメソッドについて

[3] pry(main)> puts 'foo'
foo
=> nil

上記のnilは計算の結果を返している。そのため、putsはfooを出力するがメソッド自体は何も返さない。

?の付くメソッド

?の付くメソッドは基本的にtrue か falseを返すようになっている。
自分でメソッドを定義するときもそれを気をつけながら定義する。

nilと''の違い

nilをto_sメソッドで文字列にしたものが''
つまり、''は0文字の文字列である。

Ruby(オブジェクト指向スクリプト言語)について

Rubyはメソッドを呼び出すという言い回しをしているが、実は少し違う。
オブジェクト指向スクリプト言語は、オブジェクトとのメッセージのやりとりだと考える。

[18] pry(main)> 'foobar'.length
=> 6

上記は、foobarの文字列は何文字?
俺は6文字だよー
という会話で成り立っている。

ブロックの考え方

>> (1..5).each { |i| puts 2 * i }
2
4
6
8
10
=> 1..5

ブロック付きメソッドはメソッドの引数にRubyの処理を渡していると考えるとわかりやすい。

メソッドチェーンについて

[20] pry(main)> %w[foo bar baz].map { |i| i.upcase }.join
=> "FOOBARBAZ"

このようにメソッドで評価された値にさらに . でメッセージを与えることをメソッドチェーンという。

ハッシュでなんでシンボルを使うのか?

[30] pry(main)> 'name'.object_id
=> 23088500
[31] pry(main)> :name.object_id
=> 88028
[32] pry(main)> 'name'.object_id
=> 24142460
[33] pry(main)> :name.object_id
=> 88028

文字列オブジェクトはオブジェクトidが毎回違う。整数はオブジェクトidが毎回同じ。ただ、シンボルにすると、object_idが毎回同じになっている。
labelとしてシンボルオブジェクトを使うと毎回同じなので毎回計算する必要がない。シンボルは人間にもわかりやすい表現ができ、整数のように計算するコスト削減ができパソコンにも優しいということ。

ハッシュの省略記法

[34] pry(main)> h1 = {:first => 'yokota', :second => 'daiki' }
=> {:first=>"yokota", :second=>"daiki"}
[35] pry(main)> h1
=> {:first=>"yokota", :second=>"daiki"}
[36] pry(main)> h2 = { first: 'yokota', second: 'daiki' }
=> {:first=>"yokota", :second=>"daiki"}
[37] pry(main)> h2
=> {:first=>"yokota", :second=>"daiki"}

シンボルを右側に書き、=>を省略した形で書くことができる。

classもオブジェクトの1つ

Rubyではあらゆるものがオブジェクトである。それはclassも例外ではない。
Stringにclassをするとclassクラスということがわかる。
Classクラスにsuperclassをするとmoduleクラスということがわかる。

また自分でクラスを定義するとき、親クラスに何も指定しないと、デフォルトでObjectクラスが継承される。