Rails風味のRuby(その1)

WED(WeekEndDevelopers)のぽんたです。

開発スキルのないSIerからソフトウェアスキルを取得するため、WEDでモノづくりを計画しています。詳しい経緯はここ
※現在はruby on railsチュートリアル(ここから)を進めていってます。

今回から4章に入ります。この章ではRubyの基礎知識を学んでいきます。

まず、第3章で作ったアプリを使うのは変更ないが、branchを切って作業をします。

まずbranchをきります。これはいつも通りですよね。ついでにきちんとbranchが切れているのかも確認してみます。

$ git checkout -b rails-flavored-ruby
Switched to a new branch 'rails-flavored-ruby'
$ git branch
  master
* rails-flavored-ruby
  static-pages

application.html.erbの更新

$ cat app/views/layouts/application.html.erb 
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</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>

railsのビューでは膨大の数の組み込み関数が使えるが、それだけでなく新しく作成することもできます。 これをカスタムヘルパーといいます。

今回はページタイトルが正しく表示されない問題を解決するために、full_titleというヘルパーを作成します。

base_titleを設定しておき、titleが空だった場合はbase_titleを表示する

$ cat 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

full_titleヘルパーでfull_titleを定義したので(def full_title(page_title = '')) application.html.erbのタイトルを変更してやる

こういう書き方はあまりわからんですが、まぁそういうもんなんだと今は理解しておきます。

$ cat 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>

static_pages_controller_test.rbをHomeページタイトル確認用にテストを更新する

$ cat test/controllers/static_pages_controller_test.rb
require 'test_helper'

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

  test "should get help" do
    get static_pages_help_url
    assert_response :success
    assert_select "title", "Help | Ruby on Rails Tutorial Sample App"
end

  test "should get about" do
    get static_pages_about_url
    assert_response :success
    assert_select "title", "About | Ruby on Rails Tutorial Sample App"
  end
end

テストスイートを実行して、テストが失敗することを確認します

$ rails test
:
:
3 runs, 6 assertions, 1 failures, 0 errors, 0 skips

ページタイトルをカスタマイズせずに表示するHomeページのためhome.html.erbを修正する

$ cat app/views/static_pages/home.html.erb 
<h1>Sample App</h1>
<p>
  This is the home page for the
  <a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a>
  sample application.
</p>

ここでテストはパスするはずなので実行してみる

$ rails test
3 runs, 6 assertions, 0 failures, 0 errors, 0 skips

無事OKになったので今回はここまでです。次回は4章の続きをします。rubyのいろいろを学んでいきます!では^^