Rails 6.0 でアプリを開発 基本の流れ②
rails 6.0は導入し、基本開発部分は同じだと思うので反復するためのメモその2。
1.アクションをgetして正常に動作することを確認
※画像ではすでに名前付きにしていることに注意
2.タイトルの設定
①各ページにタイトルを設定
②yeildとprovideで各ページからタイトルを受け渡しする
view/top_pages/home.html.erb
<% provide(:title, "Home") %>
view/layouts/application.html.erb
<title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
※自分のコードはすでに進んでいるためrails tutorialから抜粋させていただきました。
3.ルーティングを設定
①rootをtop_pages#homeに変更
②root_urlに送信できているかのテストを追加
4.タイトルに基本タイトルを与える(full_titleヘルパーの作成)
①各ページからタイトルを与えられないときはbase_titleを与える条件付け
②view/layouts/application.html.erbから呼び出し
※その下のrenderは後に行う作業なので無視で
5.header、footer、rails_defaultをパーシャル化する
①いったん、view/layouts/application.html.erb内にheaderとfooterを作成し、ナビゲーションバーなど最低限で設置(画面構成は後でいじった方が早かった)
②各パーシャルに分ける
header
footer
head内のtag系をまとめたもの
③renderでレスポンスの出力
6.routingファイルを名前付きルートに変更
①get 'top_pages/help' → get '/help', to: 'top_pages#help'に書き換え
②ここでテストも名前付きルートに変更する(root_url →root_path)
※1で使用した画像と同じ
7.sassを使用するための準備
①javascript/stylesheets/application.scss内に読み込みたいファイルインポート
②javascript/stylesheets/_custom.scssを作成しその中に記述
7-2.もしassets/stylesheets内のcssかscssファイルを読み込みたい場合
①config/webpack/webpacker.ymlファイル内に下記を記入
②javascript/stylesheets/application.scss内に読み込みたいファイルインポート
③app/assets/stylesheets/top_pages.scss内にスタイルを記述
8.統合テストの作成(リンクのテスト)
$ rails g integration_test site_layout
コードを記述
※上記のfull_tiltleのテストは下記9.をした後にテスト可能なので注意
$ rails test:integration
※エラー情報
Error:
SiteLayoutTest#test_layout_links:
NoMethodError: assert_template has been extracted to a gem. To continue using it,
add `gem 'rails-controller-testing'` to your Gemfile.
test/integration/site_layout_test.rb:7:in `block in <class:SiteLayoutTest>'
→Gemファイルにgem 'rails-controller-testing'を追加しbundle installで解決
9.テスト環境でApplicationヘルパーを使用できるようにする
①test/test.helper.rbに下記を追加
②full_titleヘルパーの単体テスト
10.Users コントローラーの作成
$ rails g controller Users new
※newアクションだけひとまず作成
11.ユーザー登録ページへのルートの設定
12.トップページにユーザー登録ページの入り口を作成
13.Usersコントローラーのてすとも名前付きルートに変更
この辺で一旦プッシュ
参考にさせていただいたサイト
第3章 ほぼ静的なページの作成 - Railsチュートリアル
Ruby on Rails 6 with Webpacker and Bootstrap - Adrian Teh - Medium