iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
0
自我挑戰組

Ruby and Rails 的二三事系列 第 13

Ruby and Rails 的二三事 - Day13 風馮諷form

  • 分享至 

  • xImage
  •  

不論是哪種程式語言,都會很常用到表單(Form)。
今天就來簡單的介紹一下rails有哪些幫忙建立表單的幫手吧!
Let's 走!

起手式 form_tag

據說,很久很久以前,是有在用 form_tag 這個語法建立form的,
通常是在沒有要使用特定 Model 時使用的。

只需要在erb檔案裡寫下:

<%= form_tag do %>
  This A Form
<% end %>

Rails 會自動幫你翻譯長出下面這串東西:

<form action="/member/show" accept-charset="UTF-8" method="post">
<input name="utf8" type="hidden" value="&#x2713;" />
<input type="hidden" name="authenticity_token" value="UgefBstVew/QQcuSk7rmjCByQBSvHPfmENYM096Je0ltEY9ileVA0YCrS1NigCgI5Yv4R/dlIt5q85RxrTI3sg==" />
  This A Form
</form>

其中:
第一個 name 屬性為 utf8 的 input,強制瀏覽器正確採用表單指定的編碼。
第二個 name 屬性為 authenticity_token 的 input,
是 Rails 內建用來防止 CSRF (cross-site request forgery protection) 攻擊的安全機制。

蝦米洗CSRF?

簡單來說就是:欺騙使用者的瀏覽器,讓其以使用者的名義執行操作。


form_for

接下來是 form_for,剛剛說 form_tag 是沒有配合特定Model在使用語法,
那當然就會有要配合特定 Model 物件的用法啦!

通常這時候,我們會在 Controller 裡,透過 Model 來建立物件:

#app/controllers/products_controller.rb
def new
  @product = Product.new
end

然後會在對應的erb檔裡,用form_for語法來建立表單:

app/views/products/nw.html.rb
<%= form_for(@product) do |form| %>
  <%= form.input :name %>
  <%= form.input :price %>
  <%= form.input :description %>
  <%= form.input :is_available %>
  <%= form.submit class: 'btn btn-success' %>
<% end %>

form_with

很麻煩吶,一下子form_tag,一下子form_for的,
有木有懶人包,兩種情況都能使用的語法啊?!

有有有當然有:form_with就是Rails 5.1設計推出的新的語法:

沒有 Model 時候的 form_with

<%= form_with url:posts_path do |form| %>
  <%= form.text_field :name %>
  <%= form.submit %>
<% end %>

有 Model 時候的 form_with

<%= form_with model: @post do |form| %>
  <%= form.text_field :name %>
  <%= form.submit %>
<% end %>

什麼?你說我還有很多細節沒有說?
說好是簡單介紹的吼!!

好啦,補一下參考資料。
就將,先來補個普拿疼去...

跨站請求偽造
Action View 表單輔助方法
FormHelper


上一篇
Ruby and Rails 的二三事 - Day12 利用Enum設定欄位資料
下一篇
Ruby and Rails 的二三事 - Day14 Active Record?可以說中文嗎?
系列文
Ruby and Rails 的二三事19
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言