学習記録

アウトプット用に作りました

form_withについて

form_withメソッドとは

入力フォームを実装するためのヘルパーメソッドです。
form_withには、model:とurl:オプションがあります。
基本的にはmodel:オプションを使用します。

model:オプションを使うとき

関連するモデルがある場合に使います。
主に投稿フォームなど、入力されたデータを保存する必要があるときに使用します。

# コントローラー tasks_controller.rb
def new
  @task = Task.new #newアクションで新しいTaskオブジェクトを生成して、インスタンス変数@taskに代入
end
# ビューファイル new.html.erb
<%= form_with model: @task, local: true do |f| %>
  <%= f.label :name %>
  <%= f.submit %>
<% end %>

※ local: trueはデフォルトではajax通信になってしまうため記述する必要があります。

モデルを渡したときは、URLが自動推測されます。
@userがデータベースに存在するとき(更新)はupdateアクションに、ないときはcreateアクションに飛びます。

model:にインスタンス変数を渡しておくと、入力ミスなどで登録等が失敗したときに、
入力フォームに値を残すことができます。


どんなときにurl:オプションを使うのか

  1. モデルとフォームが紐づかないとき

  2. createやupdateを行うコントローラがモデルと紐づかないとき

主に検索フォームやログインフォームなどの
フォームに入力されたデータを保存する必要がないときに使います。

<%= form_with url: login_path, local: true do |f| %>
   <%= f.text_field :email %>
   <%= f.submit %>
<% end %>