0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【コア機能】app/views/deliveries/new.html.erb作成・コース選択画面

Posted at

前章でログイン画面のビュー作成まで行いました。
従業員コードを入力し、ログインボタンを押しても
次の画面がまだ存在していないため、特に何の変化も起こりませんでした。
今回はその”次の画面”であるapp/views/deliveries/new.html.erbを作成します。

目次

  • 1.ファイル作成
  • 2.app/views/deliveries/new.html.erb編集
  • 3.ルーティング設定
  • 4.動作確認
  • 5.ビューにコース選択追加
  • 6.routes.rb編集

1.ファイル作成

app/views/deliveriesに直接ファイルを新規作成し、
new.html.erbと命名する。

2.app/views/deliveries/new.html.erb編集

まずはログインが成功したか確認用

<h1>Course</h1>
<p>ログイン成功!コース選択ページです。</p>

<%= link_to "ログアウト", logout_path, data: { turbo_method: :delete } %>

<%= link_to "ログアウト", logout_path, data: { turbo_method: :delete } %>
→ログアウト機能でいつも使用される一文。覚えてしまう。
Rails 7 以降では Hotwire / Turbo という仕組みがあり、
内部的にJavaScriptがDELETEリクエストに変換して送ってくれる。

3.ルーティング設定

routes.rbに以下の一文を追加。

  resources :deliveries, only: [:new] #コース選択画面のルーティング

これをRailsが読んで自動で以下の様にメソッドとパスを作成してくれます。

HTTPメソッド パス コントローラー#アクション ヘルパー名
GET /deliveries/new deliveries#new new_delivery_path

routes.rb完成系

Rails.application.routes.draw do
  root to: 'sessions#new' #ホーム画面をログイン画面に設定

  get 'login', to: 'sessions#new'  #ログイン画面(表示)
  post 'login', to: 'sessions#create'  #ログイン処理(フォーム送信)
  delete 'logout', to: 'sessions#destroy'  #ログアウト処理

  resources :deliveries, only: [:new] #コース選択画面のルーティング
end

login/logoutは目視的にURLにlogin/logoutとつけたいので、
コードを変更していません。
コードの可読性を重視するなら以下の様に変更してもいいかもしれないですね。

resource :session, only: [:new, :create, :destroy]

4.動作確認

スクリーンショット 2025-11-06 4.27.58.png

スクリーンショット 2025-11-06 4.28.06.png
成功しました♪
次はここにコース選択を増やします。

5.ビューにコース選択追加

コースを選択するプルダウンの実装箇所

<%= form_with url: deliveries_path, method: :post, local: true do |form| %>
  <div>
    <%= form.collection_select :course_id, Course.all, :id, :name, prompt: "コースを選択" %>
  </div>
<% end %>

<%= form_with url: deliveries_path, method: :post, local: true do |form| %>
→フォームを作成して、入力内容を /deliveries に POST送信する。
form_with url: deliveries_path,
→送信先URLを /deliveries に設定
method: :post,
→HTTPメソッドを POST に指定(DBへ新しいデータを送る時に使用)
local: true
→JavaScript(Turbo/Hotwire)を使わずに普通のフォーム送信。
Rails7のHTMLをTurbo Frameで差し替えようとする挙動が難しく一旦無視したいので、無効化しています。

collection_select
→プルダウン作成

6.routes.rb編集

[3.ルーティング設定]で追記した一文に[:create]を追加

  resources :deliveries, only: [:new, :create] #コース選択画面のルーティング

newは画面を表示させるだけの機能で、処理が行えない。
今回はDBに新しく登録をし、配達登録を開始させたいので[:create]を追加しています。

アクション 何をする? なぜ必要?
new フォームを見せるだけ 画面を表示するため(DB操作はない)
create フォーム送信後に処理を行う DBに新しいデータを登録するため

7.動作確認

スクリーンショット 2025-11-06 5.11.05.png

スクリーンショット 2025-11-06 5.11.13.png


私のオリジナルプロダクト「Logi-Balance]に関して、
要件定義書や画面遷移図等を以下のGitHub上で公開しております。
GitHub

注意
私はプログラミング学習歴1年未満の初学者です。
この記事は自身の備忘録用として掲載しております。
間違いがあるかと思いますので、今後の学習のためにコメントにご指摘を頂けますと幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?