วันอังคาร, มีนาคม 10, 2552

customize text_field

ได้แรงบรรดาลใจมาจาก 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) + "" + super) 
    end 
  end 
end
จากนั้นที่ _form.html.erb ก็ใช้ doo_form_for แทน ผมลองบน rails 2.0.2 ครับ ไม่รู้ว่า 2.1 จะสามารถใส่ :builder ลงใน form_for เลยได้หรือเปล่า ประมาณนี้ แต่ผมชอบแบบใช้ doo_form_for มากกว่า ดูลึกลับดี ปล. ที่ใช้คำว่า doo ไม่ได้มีความหมายพิเศษครับ แต่เพราะ project ที่ทำงานชื่อว่า dooExpert เลยใช้คำว่า doo นำหน้าน่ะครับ

blog comments powered by Disqus