เพิ่งทำของเล่นเสร็จไปตัวนึง เลยไม่ได้เขียน blog
ไม่ต้องพล่ามมาก เอาเลยดีกว่า
ใน Rails มี Form helper อยู่ เราทำอะไรกับมันได้บ้าง?? ลองดูแบบนี้ก่อน
1
2
3
4
5
6
| <% form_for :person, @person, :url => { :action => "update" } do |f| %>
First name: <%= f.text_field :first_name %>
Last name : <%= f.text_field :last_name %>
Biography : <%= text_area :person, :biography %>
Admin? : <%= check_box_tag "person[admin]", @person.company.admin? %>
<% end %>
|
ปกติ ผมจะต้องใส่ label ให้มันด้วย
ผมไม่ค่อยชอบเลย ผมอยากได้
f.text_field :first_name
แล้วมันใส่ label ไปให้ผมเลย
มันทำได้โดยสร้าง module เพิ่ม ไปใว้ใน config/initializers/ (มันมาตอน rails 2.0 ออกมั้ง ทุก file ในนี้ จะถูกโหลดโดยอัติโนมัติ)
1
2
3
4
5
6
7
| module MyFormHelper
class MyFormBuilder < ActionView::Helpers::FormBuilder
def text_field(method, options = {})
@template.content_tag('p', label(method) + <br /> + super)
end
end
end
|
ก็ extends ตามเรื่องไป(ต้องใช้พลังแงะนิดหน่อย)
ใน form ด้านบน ก็เพิ่ม :builder => MyFormHelper::MyFormBuilder
หน้าตาจะเป็นแบบนี้
1
2
3
4
5
6
| <% form_for :person, @person, :url => { :action => "update" }, :builder => MyFormHelper::MyFormBuilder do |f| %>
<%= f.text_field :first_name %>
<%= f.text_field :last_name %>
<%= text_area :person, :biography %>
<%= check_box_tag "person[admin]", @person.company.admin? %>
<% end %>
|
แล้วผมก็จะได้ผลของการ render text_field เป็นแบบนี้
1
2
| <p><label for="person_first_name">First name</label><br />
<input type="text" id="person_first_name" name="person[first_name]"</p>
|
อะไรประมาณนี้