らくだ🐫にもできるRailsチュートリアル|4.1

Railsで重要なRubyの知識。的な事。

あ、せっかく3章でテストを勉強したことですし
本文にテスト結果の表示がある場合、合わせて表示させていきます

4.1 動機

Rubyの知識があった方が理解も深まるし作業効率も上がるのだ。的な事。

ブランチを作る

ターミナル
(master) $ git checkout -b rails-flavored-ruby
Switched to a new branch 'rails-flavored-ruby'
(rails-flavored-ruby) $ 

4.1.1 組み込みヘルパー

組み込みヘルパーとはなんぞ

初めから用意されている(Railsに組み込まれている)便利な部品・仕組み→組み込み関数・ビルドイン関数
viewに呼び出して(組み込んで)使う

stylesheet_link_tag

引数として指定されたスタイルシートを使えるようにする(ざっくり)
詳しくは → Rails API

<%= stylesheet_link_tag 'application', media: 'all',
#スタイルシートへのリンクタグを作る リンクするのはapplication.css メディアタイプはすべてに対応
                                       'data-turbolinks-track': 'reload' %>
                      #必要に応じてりリロードする設定

この中にあるRubyの概念
「Railsの組み込み関数」「カッコを使わないメソッド呼び出し」「シンボル」「ハッシュ」について学んでいく等する

メディアタイプとは何ぞ

メディアタイプ → 画面・印刷などの出力先

4.1.2 カスタムヘルパー

Railsのviewでは、元々用意されている組み込み関数を使えるだけでなく
自分で関数(メソッド)を作って使うことも出来る → カスタムヘルパー

3章で作ったタイトル表示に手を加えて
Home,Aboutなどのページタイトルがついていない場合に
「| Ruby on Rails Tutorial Sample App」ではなく
「Ruby on Rails Tutorial Sample App」と表示されるようにしていく

/sample_app/app/views/layouts/application.html.erb
module ApplicationHelper
    
  # ページごとの完全なタイトルを返します。
  def full_title(page_title = '')
  #関数full_title(page_titleにそれぞれのページのtitleを代入したものを引数に設定)
  #関数full_title(page_title = ''をデフォルト地に設定)
    base_title = "Ruby on Rails Tutorial Sample App"
    #base_titleに文字列Ruby on Rails Tutorial Sample Appを代入
    if page_title.empty?
    #page_titleが空っぽの場合
      base_title
      #base_title(Ruby on Rails Tutorial Sample App)を返す
    else
    #そうでない場合(page_titleが存在する場合)
      page_title + " | " + base_title
      #page_title | base_title(「About | Ruby on Rails Tutorial Sample App」のような形)
    end 
  end
  
end

作ったヘルパーを利用してapplication.html.erbをリファクタリング(!)

/sample_app/app/views/layouts/application.html.erb GREEN

<!DOCTYPE html>
<html>
  <head>
    <title><%= full_title(yield(:title)) %></title>
    #full_titleヘルパーを呼び出す
    <%= csrf_meta_tags %>
・
・
・

さらにルートで表示されるHomeページのタイトルに「Home」の文字を表示させないようにする
まずはテストの”should get root”のスコープを編集

/sample_app/test/controllers/static_pages_controller_test.rb RED
require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest
  
  def setup
    @base_title = "Ruby on Rails Tutorial Sample App"
  end
 #本文では表記が外れてますがせっかくなので生かしていきたい
  
  test "should get root" do
  #3.4.4の演習で"should get root"に直したものが本文では"should get home"に戻っている
  #routes.rbも編集した関係から3.4.4の演習作った"should get root"のテスコスコープを生かす形で
    get root_url
    assert_response :success
    assert_select "title", "#{@base_title}"
    #本文ではassert_select "title", "Ruby on Rails Tutorial Sample App"
    #せっかく設定したので@base_titleを変数展開する形で
  end
#以下のテストケースも本文では変数展開ではなくRuby on Rails Tutorial Sample App表記になっていますが
#わざわざ書き直さず変数展開な表記のままで
・
・
・

テストが成功する様にhome.html.erbを編集

/sample_app/app/views/static_pages/home.html.erb GREEN
<% provide(:title, "Home") %>
#この行を削除
    <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チュートリアルとは

「ド」が付く素人のらくだ🐫が勉強するRailsチュートリアルの学習記録です。
自分用に記録していますが、お役に立つことがあれば幸いです。

調べたとはいえらくだ🐫なりの解釈や説明が含まれます。間違っている部分もあるかと思います。そんな所は教えて頂けすと幸いなのですが、このブログにはコメント機能がありません💧お手数おかけしますがTwitterなどでご連絡いただければ幸いです