らくだ🐫にもできる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
#スタイルシートへのリンクタグを作る リンクするのはapplication.css メディアタイプはすべてに対応 <%= stylesheet_link_tag 'application', media: 'all', '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」と表示されるようにしていく
module ApplicationHelper # ページごとの完全なタイトルを返します。#関数full_title(page_titleにそれぞれのページのtitleを代入したものを引数に設定)#関数full_title(page_title = ''をデフォルト値に設定) def full_title(page_title = '') #base_titleに文字列Ruby on Rails Tutorial Sample Appを代入 base_title = "Ruby on Rails Tutorial Sample App" #page_titleが空っぽの場合 if page_title.empty? #base_title(Ruby on Rails Tutorial Sample App)を返す base_title #そうでない場合(page_titleが存在する場合) else #page_title | base_title(「About | Ruby on Rails Tutorial Sample App」のような形) page_title + " | " + base_title end end end
作ったヘルパーを利用してapplication.html.erbをリファクタリング(!)
<!DOCTYPE html> <html> <head> #full_titleヘルパーを呼び出す <title><%= full_title(yield(:title)) %></title> <%= csrf_meta_tags %> ・ ・ ・
さらにルートで表示されるHomeページのタイトルに「Home」の文字を表示させないようにする
まずはテストの”should get root”のスコープを編集
require 'test_helper' class StaticPagesControllerTest < ActionDispatch::IntegrationTest #本文では表記が外れてますがせっかくなので生かしていきたい def setup @base_title = "Ruby on Rails Tutorial Sample App" end #3.4.4の演習で"should get root"に直したものが本文では"should get home"に戻っている #routes.rbも編集した関係から3.4.4の演習作った"should get root"のテスコスコープを生かす形で test "should get root" do get root_url assert_response :success #本文ではassert_select "title", "Ruby on Rails Tutorial Sample App" #せっかく設定したので@base_titleを変数展開する形で assert_select "title", "#{@base_title}" end #以下のテストケースも本文では変数展開ではなくRuby on Rails Tutorial Sample App表記になっていますが #わざわざ書き直さず変数展開な表記のままで ・ ・ ・
テストが成功する様にhome.html.erbを編集
#下の削除 <% 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などでご連絡いただければ幸いです