Rails チュートリアル 第4章 まとめ


問題提起
トップページには Home | Ruby ---ではなくて、 Ruby ----がベター
→トップページのみ | なしで基本タイトルのみ表示、それ以外はHome | Rのように表示したい
解決策
Helperメソッドで対処、generateで生成されるもので、便利そうなものを置いておく場所

Helperメソッドの実装、このときRubyの文法がわからないとコードが書けない

app/helpers/application_helper.rb
module ApplicationHelper

  # ページごとの完全なタイトルを返します。
  def full_title(page_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

これをapplication.html.erbで、<%= full_title(yield(:title)) %> のように使う
もし、full_titleに追加タイトルありが入ってくれば、full_title(Help)となるので、if-else文はpage_title=Helpからemptyではないので、elseに行き、Help | Ruby on--- が表示される

もし、full_titleに""が入ってくれば、trueなのでRuby on ---だけが表示される
オプション引数で""を指定しているので、home.htmlからprovideを消してもいい
full_title(yield(:title)が実行された場合、yield(:title)がなければオプション引数の""が実行されるから(ここの論理の流れは要復習)

Ruby----
Rubyの世界では、あらゆるものがオブジェクト
オブジェクトにメッセージを投げたら、そのオブジェクトが受け答えしてくれる
例えば

"foobar".length
=> 6

foobarという文字列オブジェクトに長さは何かというメッセージ(length)を投げたら、6というメッセージを返してくれる
1.to_s "foobar".reverseも同様

nil、true、falseもオブジェクト、オブジェクトであればメッセージの受け渡しができるから
こうしたあらゆるものがオブジェクトである言語を、オブジェクト指向という

Rubyの思想、and or unless 人間のやりたいことをコンピュータが推測してくれ
自由 インデントで強制をかけない

irbとRails consoleは少し違う(.secondなど、railsであったらいいと思う機能も用意されている)

eachは万能だが、配列を作りたいならmapのように細かいブロック付きメソッドは用意されている

ハッシュ {}
キーと値、タンスのラベルと中身でイメージする

user["name"] = "---"

実際は、ラベルとして文字列オブジェクト"name"を使わず、シンボルオブジェクト:nameを使う

user[:name] = "---"

シンボルを使う理由は、文字列はオブジェクトが毎回変わるのでコンピュータにその場所を毎回調べてもらう必要があってコストがかかる。シンボルは数字と同様に、オブジェクトの場所が変わらないので、コンピュータにとって負担が少なく、それでいて数字よりも中身を人間が理解しやすいので、ラベルで使われる
オブジェクトの場所はuser[:name].object_idで調べることができる

組み込みクラスの変更を許容、よくわからない