ได้แรงบรรดาลใจมาจาก blog ของ PunNeng หน้านี้ พยายามเอามาใช้กับ project ที่ทำงานอยู่แต่ทำยังไงก็ไม่ work ซะที สงสัยเพราะว่าใช้ rails คนละ version กัน ดูใน ruby trac เค้าบอกว่าจะปรับ attribute ของ form_for ใหม่ แต่ตอนนั้นดูแบบคร่าวๆ เพราะไม่รู้ว่าต้องแก้ตรงนี้
สุดท้ายมั่วไปมั่วมาได้ resolution ว่าให้สร้าง file doo_form_helper.rb ไว้ที่ app/helper แบบนี้
module DooFormHelper
def doo_form_for(record_or_name_or_array, *args, &proc)
form_for(record_or_name_or_array, *(args << {:builder => DooFormFor}), &proc)
end
class DooFormFor < ActionView::Helpers::FormBuilder
def text_field(method, options = {})
@template.content_tag('p', label(method) + "<br />" + super)
end
end
end
จากนั้นที่ _form.html.erb ก็ใช้ doo_form_for แทน
<% doo_form_for(@blog) do |f| %>
<%= f.text_field :title %>
<% end %>
ผมลองบน rails 2.0.2 ครับ ไม่รู้ว่า 2.1 จะสามารถใส่ :builder ลงใน form_for เลยได้หรือเปล่า
<% form_for(@blog, :builder => DooFormFor) do |f| %>
<%= f.text_field :title %>
<% end %>
ประมาณนี้ แต่ผมชอบแบบใช้ doo_form_for มากกว่า ดูลึกลับดี
ปล. ที่ใช้คำว่า doo ไม่ได้มีความหมายพิเศษครับ แต่เพราะ project ที่ทำงานชื่อว่า dooExpert เลยใช้คำว่า doo นำหน้าน่ะครับ ยังมีต่อครับ >