iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 25
1
自我挑戰組

從色彩繽紛到只看亂碼日子,學程式從 Ruby 出發!系列 第 25

Day25 | form_for vs. form_with

form_for

早期要建立表單的時候,還會依照是否已建立 model 來選擇 form 的方法,在尚未建立任何 model 的時後,通常會使用 form_tag 來製作較為簡單形式的表單。

<%= form_tag users_path do %>
  <%= text_field_tag :email %>
  <%= submit_tag %>
<% end %>

當專案有建立好的 Model 時,就會使用 form_for

<%= form_for @user do |f| %>
  <%= f.text_field :email %>
  <%= f.submit %>
<% end %>

因為本文不討論form_tag,所以就大概提到這邊…

更多內容請參考form_for @ Rails API

form_with

直到 Ruby 版本更新到 5.1 之後出現了 form_with。form_with 結合了form_tag 和 form_for 的功能,所以接下來不管在有無 Model 的情況下都可以直接使用。

沒有 Model 時候的 form_with

<%= form_with url: users_path do |form| %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>

有 Model 時候的 form_with

<%= form_with model: @user do |form| %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>

form_with 選項
:model:使用model後會自動會表單加上url和scope
:scope:用來為表單中的欄位增加namespace的prefix
:method:get . post . patch . put . delete
:format:設定要求回傳的檔案型態
:authenticity_token
:local:如果不希望使用 remote: true ,可以加上 local: true

更多內容請參考form_with @ Rails API

在爬文時有看到別人寫說 form_with 之後會完全取代 form_tag 和 form_for,所以不久後只會留下 form_with?關於這件事的真假,就再觀察啦!


參考連結:
[Rails] Action View Form Helpers
[Rails 5.1] 'form_with' APIドキュメント完全翻訳


上一篇
Day24 | Rails 的 Helper
下一篇
Day26 | Rails關於Gemfile
系列文
從色彩繽紛到只看亂碼日子,學程式從 Ruby 出發!30

尚未有邦友留言

立即登入留言