【本日の学習内容:Rails課題2】
CRUD処理を実装したアプリの作成を進めました。
✅usersコントローラのnewアクションに対応するビューを作る
viewディレクトリ内にusersディレクトリを作成し、new.html.erbファイルを作る。
投稿画面フォームを作るため、以下のコードを記述する。
<%= form_with model:@user, url: "/users", method: :post, local: true do |f| %>
<p>投稿</p>
<p>お名前:<%= f.text_field :name %></p>
<p>年齢:<%= f.text_field :age%></p>
<input type="submit" value="送信">
<% end %>
✅ルート、コントローラー、ビューが書けたのでサーバーを立ち上げて確認
http://localhost:3000/users/newで投稿画面が表示されることを確認する。
✅新規登録をするためのルーティングを書く
テーブルが作成できたら、次にデータベースにデータを登録するためのルーティングやコントローラの処理を実装する。
Rails.application.routes.draw do
# 新規投稿画面へのルーティング
get '/users/new', to:'users#new'
# 新規登録するためのルーティング
# <%= form_with model:@user, url: "/users", method: :post, local: true do |f| %>と対応している
post '/users', to:'users#create'
end
✅form_with
Railsで情報を送信するためのヘルパーメソッド。form_withを使うことで簡単に入力フォームに必要なHTMLを作成できる。
参考:https://pikawaka.com/rails/form_with
:https://techracho.bpsinc.jp/hachi8833/2017_05_01/39502
form_tagのように入力された情報をデータベースに保存しない時は、以下のように記述する。
1️⃣form_tagのように、入力されたデータをデータベースに保存しない場合のform_withの書き方
<%= form_with url: "パス" do |form| %>
フォーム内容
<% end %>
2️⃣form_forのように、入力されたデータをデータベースに保存する時は、以下のように記述する。
<%= form_with model: モデルクラスのインスタンス do |form| %>
フォーム内容
<% end %>
データーベースに保存する場合、form_withの引数にはモデルクラスのインスタンスを指定する。
※()は省略可能です。
モデルクラスのインスタンスとは保存したいテーブルのクラスのインスタンスのこと。
今回はusersテーブルに新たにレコードを作成したいので、コントローラー側で下記のように記述する。
コントローラー
def new
@user = User.new
end
この@userをform_withの引数に指定するわけ。
コントローラーで作成したインスタンスがnewメソッドで新たに作成されて何も情報を持っていなければ自動的にcreateアクションへ、findメソッドなどで作成され、すでに情報を持っている場合はupdateアクションへ自動的に振り分けてくれる。
投稿フォームの作り方
ビューファイル | 投稿フォームの作成
<%= form_with model: @user do |form| %>
<%= form.text_field :name %>
<%= form.submit %>
<% end %>
このようにform.htmlタグ名 :カラム名と指定する。
つまり上の例だとusersテーブルのnameカラムに投稿した内容が送られることなる。
送信ボタンはform.submitとするだけで作成される。
form_withは最初は記述が難しそうに感じるが、実は非常にシンプルに記述ができる。