はじめに
以前の投稿で作成したRails7+Ruby3のdocker環境に、新たにControllerを追加してみたいと思います。環境構築からしてみたいという方はぜひ↓の記事を参考にしてみてください。コピペだけでdocker-compose+Rails7+Ruby3+MySQLの環境を作ることができます。
筆者の環境
前提
基本的にはホストPCにはRubyやRailsが存在しないということを前提にしています。
そのため、Railsコマンドなんかは全てdocker環境内で実行する形となります。
やりたいこと
ブラウザで http://localhost:3000
と入力して任意のページを表示する
やること
- コントローラ作成(sample_controller.rb)
- ルーティング設定
- コントローラ修正
- ビューファイル修正
- ブラウザアクセスしてみて挙動確認
コントローラ作成
もちろん手動でファイル作成もできますが、モダンなウェブフレームワークらしくここはコマンドで作成してみましょう。以下のコマンドを実行することでコントローラやビューなどのファイルが自動で生成されます。
# docker環境に入る
$ docker-compose exec app bash
# docker環境内で以下のコマンドを実行する
root@66608e8b1148:/app# rails g controller sample_controller index
create app/controllers/sample_controller.rb
route get 'sample/index'
invoke erb
create app/views/sample
create app/views/sample/index.html.erb
invoke test_unit
create test/controllers/sample_controller_test.rb
invoke helper
create app/helpers/sample_helper.rb
invoke test_unit
色々できましたね。
今回この中で使うのは sample_controller.rb
と app/views/sample
配下のファイルのみになります。
ルーティング設定
Railsプロジェクトに最初から自動生成されている config/routes.rb
を修正していきます。
今回はホストのルートにアクセスした時に sample_controller.rb
の処理を通るようにやっていきましょう。
以下をconfig/routes.rb
に追記してください。
root "sample#index"
これだけでOK
コントローラ修正
routes.rbで sample#index
を指定しているので、index
メソッドを追加します。
こんな感じです。
class SampleController < ApplicationController
def index
@greeting = 'hello'
end
end
@greeting = 'hello'
は helloという文字列が格納されたgreetingという変数をフロントに持っていきます、ということになります。
ここでは明示的に指定しなくても、views/sample/index.html.erb
を見るという設定になっています。
ではビューを作っていきましょう。
ビューファイル修正
ブラウザにレンダリングされるビューのファイルをいじっていきます。
views/sample/index.html.erb
です
<h1>Sample#index</h1>
<p>Find me in app/views/sample/index.html.erb</p>
<br>
<p><%= @greeting %></p>
下の2行を追記しました。
これで準備OKですね。ブラウザでアクセスしてみましょう。
ブラウザアクセスして挙動確認
localhost
:3000にアクセスしてみましょう。↓のように表示されたら成功です。
