railsではデフォルトとして、form_with model:@userとした場合、Userモデルnew=>createと推察して勝手にレールを準備してくれる。
<%= form_with model: モデルクラスのインスタンス do |f| %>
<% end %>
例えば、以下のように記述したとき、railsは「ふむふむ、@userということはUsermodelのnewを経由して、createに飛ばせばいいんだな」と判断してくれる。
<%= form_with model:@user do |f| %>
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.submit "submit", class: "btn btn-primary" %>
<% end %>
ただし、modelが存在しない場合はurlとscopeを指定してあげる必要がある。
<%= form_with url: "パス" scope: :params do |f| %>
<% end %>
<%= form_with(url: login_path, scope: :session, local: true) do |f| %>
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.submit "Log in", class: "btn btn-primary" %>
<% end %>