helper form programming ruby rails

เขียน Helper ช่วยในการสร้าง form

วิธีการใส่ label ให้ text_field สามารถทำได้ดังนี้ครับ

สร้างไฟล์ form_tag_helper.rb ใส่ไว้ที่ app/helpers

  1. module FormTagHelper
  2.  
  3.   def label_text_field(object, method, options = {})
  4.     options[:temp_label] = method if method
  5.     begin_html, end_html = wrapping_html(options)
  6.     begin_html + text_field(object, method, options) + end_html
  7.   end
  8.  
  9.   private
  10.   def wrapping_html(options)
  11.     label = options[:label] ? options.delete(:label) :options[:temp_label].to_s.titlecase
  12.     options.delete(:temp_label)
  13.    
  14.     generated_html = ""
  15.     generated_html << "<div>"
  16.     generated_html << "<label>#{label}</label>"
  17.  
  18.     generated_end_html = ""
  19.     generated_end_html << "</div>"
  20.      
  21.     return generated_html, generated_end_html
  22.   end
  23. end

จากนั้นใส่ include ApplicationHelper ไว้ใน application.rb ด้วยครับ

เวลาเอาไปใช้เราแค่ใส่สั้นๆ ใน view แบบนี้ครับ

  1. <% label_text_field :quotation, :cname, :label => "creater name" %>

ถ้ามีให้ใส่หลาย field จะยิ่งคุ้มมากๆ และในกรณีที่เราตั้งชื่อ field ดีๆ เราสามารถเขียนแค่

  1. <% label_text_field :quotation, :creater_name %>

เป็นการลด code เพิ่มความเข้าใจ และลดความเสี่ยงที่จะเกิด bug ไปในตัว

ฟังก์ชัน wrapping_html สร้างไว้เพราะในการใช้งานจริงเราไม่ได้มี label_text_field แค่อันเดียว เราอาจจะต้องมี label_text_area label_live_search label_text_field_require ด้วย เวลาแก้ไขจะได้แก้ที่เดียว

สำหรับสร้างฟอร์มแบบนี้ใน rails 2.0 ( f.label_text_field ) ลองดูที่ customize text_field นะครับ

Syndicate content