0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

わたしがRailsチュートリアルで学んだこと【4章】

Last updated at Posted at 2019-07-10
  • 注意:プログラミング歴29日の初心者が書いています

  • 注意:間違っていたら優しく教えてください(喜びます)

「Ruby on Rails チュートリアル実例を使ってRailsを学ぼう」
https://railstutorial.jp/

素晴らしいチュートリアルに感謝します。

4.1.1 組み込みヘルパー

組み込み関数ってなんですか

組み込み関数とは、プログラミング言語がもともと用意してくれている関数のことです。
ビルトイン関数とも言います。

ヘルパーってなんですか

viewで使える関数のことをrailsではヘルパーと呼んでいます。

つまり、
「組み込みヘルパー」とは

  • 「railsがもともと用意してくれている」

  • 「viewで使える関数」

のことです。

4.1.2 カスタムヘルパー

カスタムヘルパーってなんですか

  • 「自分でカスタムした(自分で作る)」

  • 「viewで使える関数」

ということになります。

リスト 4.2: full_titleヘルパーを定義する

「Home」ページにアクセスした際に、Home | Ruby on Rails Tutorial Sample App ではなく、 Ruby on Rails Tutorial Sample Appのみを表示させたい。
しかし、現状のコードのまま実装を進めると、|(縦棒)が残ってしまいます。

「full_title」関数(ヘルパー)を作って、|(縦棒)が残らないようにしましょう。

viewで使いたい関数はhelperディレクトリ内のファイルに記述する

これです。ここで言いたいのは多分これです。
「viewで使いたい関数はhelperディレクトリ内のファイルに記述すること」

ヘルパーの中身

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

#1: full_title関数の定義・引数page_title = ''は、『引数としてpage_titleをとる。引数の指定がない場合は' 'を引数とする』という意味です。

#2: 変数base_title"Ruby on Rails Tutorial Sample App"を代入。

#3: page_titleに対して.empty?メソッドを用いて、変数内に値が存在するかどうかで条件分岐させます。

#4: .empty?メソッドは、変数が空ならTrueを返します。 page_titleが空のとき、base_titileのみを返します。
(ちなみに、Rubyではメソッドがtrueまたはfalseを返す場合、メソッド名に?がついています。)

#5: 変数内に値が存在する場合、page_title|(縦棒)base_titleを返します。


application_helper.rbに書き込まれた上記の内容は、railsの力によって、自動的にapplication.html.erbで使用可能になります。

apprication.html.erbの中身

<title><%= full_title(yield(:title)) %></title>

タイトルタグのコードです。
ヘルパーで定義した、「full_title」関数を呼び出しています。

引数には、yieldメソッドでページごとにprovideで設定してあるタイトルを呼び出しています。

Homeページから「Home | 」を取り除く

まずはテストから作り初めて、それからテストを通す実装をします。

  test "should get home" do
    get static_pages_home_url
    assert_response :success
    assert_select "title", "Ruby on Rails Tutorial Sample App"#←ココ
  end

home_urlのgetリクエストに対して、
titleは"Ruby on Rails Tutorial Sample App"を表示
というテストです。

rails testすると当然失敗します。
なぜなら、home.html.erbprovideメソッドがタイトルとして"Home"を指定しているからです。

テストを通すためには、
home.html.erbから、provideメソッドの行を取り除きます。

4.3.2 ブロック

ブロックは、メソッドの引数として渡すことのできる処理のかたまりです。
{}波括弧do ... endの部分がブロックです。

test "should get home" do
  get static_pages_home_url
  assert_response :success
  assert_select "title", "Ruby on Rails Tutorial Sample App"
end

テスト文も、じつはtestメソッドが、引数としてブロックをとっています。
do ... endで挟まれた処理がtestメソッドの引数になっています。

4.4.5 ユーザークラス

class User
  attr_accessor :name, :email #アクセサメソッド

  def initialize(attributes = {}) #initializeメソッド
    @name  = attributes[:name]
    @email = attributes[:email]
  end

  def formatted_email #インスタンスメソッドの定義
    "#{@name} <#{@email}>"
  end
end

#アクセサメソッド
インスタンス変数に、クラス外からアクセスできるようになります。

#initializeメソッド
User.newを実行すると自動的に呼び出されるメソッドです。
.newと同時に実行されます。

#インスタンスメソッドの定義
メソッドを呼び出すことで、
"ユーザー名 <メールアドレス>"という文字列を返すメソッドです。
特に意味はないです。

 user = User.new(name: "Michael Hartl", email: "mhartl@example.com")

上記のように使えます。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?