##最初に
formの使い方が曖昧だったので勉強致しました。
至る所で紹介されていることで、個人的なアウトプットですので、ご了承ください。
##formの使い分けについて
formは3種類が存在していますが、使い分けが曖昧でした。
・form_tag
モデルがない時に使用します。
使用例で言うと検索フォームです。
・form_for
データのモデルがある時に使用します。
使用例で言うと投稿フォームです。
・form_with
記述次第で「form_tag」と「form_for」の両方の使い方ができます。
現在のバージョンで推奨されている書き方です。
##form_tagの基本構文
form_tagを使うときは基本的にアクション属性とHTTPメソッドを指定します。
<div>
<%= form_tag (action: :index, method: :post) do %>
<input type="text" id="name">
<input type="submit">
<% end %>
</div>
##form_forの基本構文
form_forはインスタンス変数を引数として渡します。
さらにHTMLのinputタグは使わず、フォームのビルドヘルパー(form.hoge)を使用します。
controller
def new
@user = User.new
end
view
<%= form_for(@user) do |form| %>
<%= form.text_field :name %>
<%= form.submit %>
<% end %>
##form_withの基本構文
・form_tagの様な書き方
<%= form_with url: users_path do |form| %>
<%= form.text_field :email %>
<%= form.submit %>
<% end %>
・form_forの様な書き方
form_withはデフォルトでAjax
<%= form_with model: @user, local: true do |form| %>
<%= form.text_field :email %>
<%= form.submit %>
<% end %>
##最後に
まだまだ覚えないといけない書き方がたくさんありますが、少しずつ覚えていきます。