17
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rails]hamlでのform_with/form_for/form_tagの書き方

Last updated at Posted at 2020-03-17

#はじめに
hamlでのformの書き方がまとまっていなかったのでまとめる

form_tagform_forRails5.1で非推奨となっており、将来的にform_withに置き換えられる予定です。
極力、Rails5.1以上form_withの使用を推奨します。

#Railsのformの種類
##1. form_tag

  • 関連するモデルがない時に使用する(検索機能など)
  • inputタグを用いる(ビルドヘルパーを用いない)
<%= form_tag users_path do %>
  <%= text_field_tag :email %>
  <%= submit_tag %>
<% end %>

##2. form_for

  • 関連するモデルがある時に使用する(投稿機能など)
  • ビルドヘルパー(form.xxxx)を用いる
<%= form_for @user do |form| %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>

##3. form_with

  • Rails5.1以上は問答無用でform_with

###form_tag/form_forとの違い

  • form_withで自動でパスが選択されるので、HTTPメソッド(getpostなど)を指定する必要が無い
  • コントローラーから渡されたActiveRecordを継承するモデルのインスタンスが利用できる
  • form_withは、form_forとform_tagの機能を組み合わせたもの、とイメージすると分かりやすい
#関連するモデルがない場合 → urlの指定のみで、modelの記述がない
<%= form_with url: users_path do |form| %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>
#関連するモデルがある場合 → modelの記述のみで、urlの指定は不要
<%= form_with model: @user do |form| %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>

#hamlでの書き方
この記事のメインはこちら

##form_tag
ビルドヘルパー(f.text_fieldなど)は記述しない点に注意

= form_tag users_path do 
  = text_field_tag :email
  = submit_tag

##form_for

= form_for @user do |form|
  = form.text_field :email
  = form.submit

##form_with

#関連するモデルがない場合 → urlの指定のみで、modelの記述がない
= form_with url: users_path do |form|
  = form.text_field :email
  = form.submit
#関連するモデルがある場合 → modelの記述のみで、urlの指定は不要
= form_with model: @user do |form|
  = form.text_field :email
  = form.submit

##参考記事
【Rails】form_for/form_tagの違い・使い分けをまとめた
【Rails 5】(新) form_with と (旧) form_tag, form_for の違い

17
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?