form_withまとめ

<%= form_with(model:@user, local: true) do |form| %>
    <%= form.label :name, "名前" %>
    <%= f.text_field :name %>
    <%= f.submit "登録" %>
<% end %>

form_withにモデルのインスタンス(@user)を渡す時は、送った情報をデータベースに保存したい時。
form_withに書いてある@userはusersコントローラーのnewアクションで定義した、@user=User.newという空のインスタンスが入っている。railsは@userがコントローラーに送られた時インスタンスが空か、すでに値が入っているかを判断してcreateアクションにデータを渡すかeditにデータを渡すかを決める。

<%= form_with url: '/login', method: :post do |f| %>
<%= f.label :email, "Email" %>
<%= f.text_field :email, class: "form-control", id: "email" %>
<%= f.submit "ログイン" %>
<% end %>​

form_withにurl を渡す時はデータベースに保存しない時、例えばセッションとか。
methodを指定できる。

余談
HTMLのinputタグを編集してform_withに書き換えしていた際、挙動がpost通信でcreateアクションにデータを送ってほしいのにget通信でnewアクションにデータを送りつつパラメータも渡しているという謎状況になって何か明示的にオプションつけなきゃいけないのかとかいろいろ考えてデバックしてた結果、HTMLのフォームタグ<form><form>にform_withが挟まっていて無理やりget通信になっていました。<form><form>を外したらちゃんと意図したとおりに動いてくれました。

この記事が気に入ったらサポートをしてみませんか?