Railsでform_forとform_tagの書き方って、いつまでも忘れがちなので、まとめておきます。
今回は、ユーザー登録用の入力フォーム(form_for)とユーザーログイン用の入力フォーム(form_tag)です。
ユーザー登録用のフォーム(form_for)
form_forはモデルにもとづいたフォームを作るときに使います。
下記のような感じです。各入力項目がf.text_field :カラム名やf.file_field :カラム名のような書き方をしています。fが当該フォームと連携しているモデルのオブジェクトだと覚えるようにしています。
<%= form_for @user do |f| %> <div class="form-group"> <%= f.label :last_name, :姓 %> <%= f.text_field :last_name %> </div> <div class="form-group"> <%= f.label :first_name, :名 %> <%= f.text_field :first_name %> </div> <div class="form-group"> <%= f.label :email, :メールアドレス %> <%= f.text_field :email %> </div> <div class="form-group"> <%= f.label :image, "プロフィール画像" %> <%= f.file_field :image %> </div> <div class="form-group"> <%= f.label :password, :パスワード %> <%= f.password_field :password %> </div> <div class="form-group"> <%= f.label :password_confirmation, :パスワード確認 %> <%= f.password_field :password_confirmation %> </div> <%= f.submit :登録, class: "btn btn-transparent" %> <% end %>
ログイン用のフォーム(form_tag)
form_tagはモデルにもとづかないフォームで使われます。
下記のようにログイン用のフォームでは、直接userモデルと連携しないため、form_tagを使っています。
各入力項目で、text_field_tagやpassword_filed_tagと記述しています。form_forのときのようにf.text_field_tagのようには書きません。
<%= form_tag(login_path, method: :post) do %> <div class="form-group"> <label for='email'>メールアドレス</label><br /> <%= text_field_tag "email","" %> </div> <div class="form-group"> <label for='password'>パスワード</label><br /> <%= password_field_tag "password", "" %> </div> <%= submit_tag "ログイン" %> <% end %>
Rails5.1からはform_with
Rails5.1からform_forとform_tagは非推奨になり、変わってform_withになります。
form_withはform_forとform_tagの両方を併せ持ったものですので、更に便利になります。
せっかくform_forとform_tagを覚えたのに。。。と思わずに、form_withも覚えておきましょう。rails5.1より古いバージョンでは、form_for、form_tagは非推奨ではないので、覚えたことは全く無駄ではないですよ。
Ruby on Railsをこれから本格的に勉強したい人は「エンジニアになるための600時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。