対象者
- form_withを使って入力項目の作成を考えている方
目的
- form_withの基礎構文を学んで、実装手順を抑えること
実際の手順と実例
1.前提
Rails tutolialのsample appを参考にしています。
- ユーザー登録の新規登録フォームを作成しようとしています。
- UsersController、Userモデル、new.html.erbに実装していきます
2.コントローラーの設定
下記のようにコントローラーに記載します。
class UsersController < ApplicationController
def new
@user = User.new
end
end
以前メンターさんにご質問させていただいた際に、
「form_withが筆記用具だとしたらnewメソッドが紙みたいなもの」
的なニュアンスのこと仰っていて、すごくしっくり来た気がします。
つまり、コントローラーにnewメソッドを定義したインスタンス変数変数は必須ということです。
このように設定することで空のモデルを作成し、
空のモデルが代入されたインスタンス変数に代入され、
form_withに変数渡してフォ-ムとモデルが関連付けられます。
3.Viewの設定
基本的には下記のように記載します
<%= form_with model:インスタンス変数, url:”リンク先”, local:true do |hoge(ブロック変数)| %>
<% end %>
前提例の情報を当てはめると
<%= form_with(model: @user, local: true) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :email %>
<%= f.email_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation %>
<%= f.submit "Create my account", class: "btn btn-primary" %>
<% end %>
ブロック変数fをそれぞれのフィールドタグに渡している形です。
代表的なフィールドは以下の通り
- form.text.field
- → 短めのテキストを入れるフォームができる
- form.text.area
- → 長めの文章を入れるフォームができる
- form.submit
- → 送信ボタン作成
実際にはこの後情報を保存しないといけないので
createアクションで情報保存しないと行けないのですが今日はここまでです
参照
投稿者コメント
以前form_withでコントローラーにnewメソッドがないのに「なんで動かないんだ???」と悩んだことあったので記事にしてみました。(恥ずかしい、、、、)
私のような初心者の方の助力になれたらなと思います
My Profile
プログラミング学習歴3ヶ月目のアカウントです!
プログラミングスクールで学んだ内容や自分が躓いた箇所等のアウトプットの為に発信しています。
また、プログラミング初学者の方にわかりやすく、簡潔にまとめて情報共有できればと考えています。
もし、投稿した記事の中に誤り等ございましたら、コメント欄でご教授いただけると幸いです。