form_forからform_withに移行する
before:users/_form.html.erb
<%= form_for user do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="inputWithIcon">
<%= f.text_field :name, class: 'form-field', placeholder: 'Your name' %>
</div>
<div class="inputWithIcon">
<%= f.email_field :email, class: 'form-field', placeholder: 'Email' %>
</div>
<%= f.password_field :password, class: 'form-field', placeholder: 'パスワード' %>
<%= f.password_field :password_confirmation, class: 'form-field', placeholder: 'パスワード確認' %>
<%= f.submit "登録", class: "btn btn-submit" %>
<% end %>
after:users/_form.html.erb
<div class="new-todo-list-form">
<%= form_with model: user, local: true do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="inputWithIcon">
<%= f.text_field :name, class: 'form-field', placeholder: 'Your name' %>
</div>
<div class="inputWithIcon">
<%= f.email_field :email, class: 'form-field', placeholder: 'Email' %>
</div>
<%= f.password_field :password, class: 'form-field', placeholder: 'パスワード' %>
<%= f.password_field :password_confirmation, class: 'form-field', placeholder: 'パスワード確認' %>
<%= f.submit "登録", class: "btn btn-submit" %>
<% end %>
</div>
local: trueを入れたのはエラーメッセージを表示させるため。
shared/_error_messages.html.erb
<% if object.errors.any? %>
<div id="error_explanation">
<div class="alert alert-danger">
<% object.errors.full_messages.each do |msg| %>
<li><h4><%= msg %></h4></li>
<% end %></div>
</div>
<% end %>
local: trueがない場合表示されないが、local: trueを追加されば表示される。
スコープのprefixを指定するとき(ログイン機能など)
before:sessions/new.html.erb
<h1>ログイン</h1>
<div class="login-form">
<%= form_for(:session, url: login_path) do |f| %>
<%= f.label :メールアドレス, class: 'label' %>
<%= f.email_field :email, class: 'form-field' %>
<%= f.label :パスワード, class: 'label' %>
<%= f.password_field :password, class: 'form-field' %>
<%= f.label :次回ログインを省略する, class: "checkbox inline" do %>
<%= f.check_box :remember_me %>
<span>次回ログインを省略する</span>
<% end %>
<%= f.submit "ログイン", class: "btn btn-submit" %>
<% end %>
<br>
<%= link_to(content_tag(:i, 'はじめての方はこちら',
class: "fas fa-angle-double-right faa-horizontal animated-hover fa-pull-left",
style: "color: sienna;"), new_user_path) %>
</div>
after:sessions/new.html.erb
<h1>ログイン</h1>
<div class="login-form">
<%= form_with scope: :session, url: login_path do |f| %>
<div class="inputWithIcon">
<%= f.email_field :email, class: 'form-field', placeholder: 'Email' %>
<%= f.password_field :password, class: 'form-field', placeholder: 'パスワード' %>
</div>
<%= f.label :次回ログインを省略する, class: "checkbox inline" do %>
<%= f.check_box :remember_me %>
<span>次回ログインを省略する</span>
<% end %>
<%= f.submit "ログイン", class: "btn btn-submit" %>
<% end %>
<br>
<%= link_to(content_tag(:i, 'はじめての方はこちら',
class: "fas fa-angle-double-right faa-horizontal animated-hover fa-pull-left",
style: "color: sienna;"), new_user_path) %>
</div>
scopeを加えるだけ。