Rails

【Rails5.1】form_withでフォーム画面を作成する方法

Rails5.1以降はフォームの作成でform_withが推奨されています。(form_forやform_tag)は非推奨のようです。

 

僕は過去にフォーム画面の作成で少しつまづいたことがあるので、これを読んだ方がつまづかないように、form_withを用いてフォーム画面を作成する方法を解説します。

※開発環境:Cloud9、Rails5.1.7、ruby2.5.0

【Rails5.1】form_withでフォーム画面を作成する方法

new.html.erb内に以下をコピペでOKです。

<%= form_with(url: '/users/create', local: true) do |form| %>
  <p>名前</p>
  <input type="text" name="name" value="<%= @user.name %>">
  <p>メールアドレス</p>
  <input type="email" name="email" value="<%= @user.email %>">
  <p>パスワード</p>
  <input type="password" name="password" value="<%= @user.password %>">
  <input type="submit" value="登録する">
<% end %>

これで、以下のようなフォーム画面を作成することができます。

※CSSを別で書く必要があるので、まったく同じにはなりませんが…

form_withのオプションの「url: ‘/users/create’」は、「登録する」のボタンを押した後に/users/createのページへ遷移するという意味です。

 

また、「local: true」は「remote: true」を無効にするために指定します。「remote: true」は、Ajax(非同期通信)を行うときに使います。といっても何のことか分からないと思うので、とりあえずはおまじないだと思って書いておきましょう。

※これを書かないとエラーになります。

 

Ajaxとかremote: trueについて詳しく知りたい方は、各自ググってみてください。

Rails初心者がform_withを使う際の注意点

form_withを使わなくても、htmlでも実装できる

注意点というか、僕が知っておきたかったことです。

 

Railsでフォーム画面の作成方法を調べてみると、form_forやform_tag、form_withなど、書き方が出てきてどれを使えばいいのやら…と困った経験がありました。

 

実は、form_forやform_tag、form_withというのはビューヘルパーというもので、ビューヘルパーは、最終的にはhtmlに変換されて画面に出力されます。つまり、form_forやform_tag、form_withを使っても、最終的には同じ結果になるというわけです。

 

※form_withは最終的に、以下のようなhtml文書に変換されます。

<form action="/users/create" method="post">
...
</form>

 

Railsでは基本的にビューヘルパーを使うっぽいですが、単に機能を実装するという点ではhtmlだけで書いてもいいのです。

 

というわけで、今回は以上です。