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:オプションを使うのか
モデルとフォームが紐づかないとき
createやupdateを行うコントローラがモデルと紐づかないとき
主に検索フォームやログインフォームなどの
フォームに入力されたデータを保存する必要がないときに使います。
<%= form_with url: login_path, local: true do |f| %> <%= f.text_field :email %> <%= f.submit %> <% end %>