form_for
以下這段是以scaffold自動建立的_form.html.erb,只修改label顯示的字與幫submit button套上bootstrap
<%= form_for(@invite) do |f| %>
<% if @invite.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@invite.errors.count, "error") %> prohibited this invite from being saved:</h2>
<ul>
<% @invite.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :name ,"姓名/暱稱 *"%><br>
<%= f.text_field :name %>
</div>
<br>
<div class="field">
<%= f.label :email,"Email *" %><br>
<%= f.text_field :email %>
</div>
<br>
<div class="field">
<%= f.label :event ,"活動 *"%><br>
<%= f.collection_select(:event_id, Event.all, :id, :title) %>
</div>
<br>
<div class="actions">
<%= f.submit "確認送出" , class:"btn btn-success btn-lg"%>
</div>
<% end %>
正常顯示:
觸發validates的狀態
simple_form
simple_form安裝&簡介:simple_form github
<%= simple_form_for(@invite) do |f| %>
<div class="field">
<%= f.input :name, label:'姓名/暱稱' %>
</div>
<br>
<div class="field">
<%= f.input :email, label:'Email' %>
</div>
<br>
<div class="field">
<%= f.association :event, label:'活動' %>
</div>
<br>
<div class="actions">
<%= f.button:submit, "確認送出", class:"btn btn-success btn-lg"%>
</div>
<% end %>
目前覺得使用simple_form優點:
- 語法比較簡潔
- 版面比較好看
- 如果欄位有加上必填的validates,會自動幫欄位加上*,提示使用者該欄位為必填
- 如果欄位有加上validates,觸發validates時欄位會變紅,非常醒目的提醒使用者該欄位有錯誤,且錯誤訊息直接顯示在欄位下方
下拉式清單製作:
先簡述一下目前的狀況,申請頁使用的資料表是invites,活動的欄位想要使用下拉式清單讓使用者選擇
- 新建一個event model或是使用scaffold再建立一個event資料表
- 幫events資料表新增一些資料
- 將invites資料表新增一個event_id欄位
- 將events和invites加上關聯,在event.rb加上「has_many:invites」,在invite.rb加上「belongs_to:event」(關於資料表關聯請參考我的這篇文章:Ruby on Rails 資料表一對多、多對多關聯)
- 接下來看你在_form.html.erb中是使用form_for還是simple_for,加入對應的下拉式清單
form_form「<%= f.collection_select(:event_id, Event.all, :id, :title) %>」
simple_form「<%= f.association :event, label:'活動' %>」