วันศุกร์, สิงหาคม 22, 2551

เขียน Ruby Helper แบบ Block

หลังจาก extend ตัว form_for มาได้ซักพัก ตอนนี้เจอโจทย์ว่าต้องสร้าง helper ที่มีตัวเปิดหัวปิดท้ายประมาณว่า

<div class="label">....</div>

ส่วนที่อยู่ตรงกลางเราให้คนใช้ ใส่กันเอง ประมาณนี้
< label_wrapping do %> .... <% end %> 

ถ้าเรามี code ที่ต้องเขียนแบบนี้ซ้ำๆ โดยเฉพาะพวกหน้า form การเขียนย่อได้แบบนี้จะช่วยลด code ได้มาก และช่วยให้การแก้ไขในภายหลังทำได้จากจุดเดียวด้วย วิธีการคือสร้าง Helper ประมาณนี้ครับ

def label_wrapping(options, &block)     
  begin_html = %{<div class="label">}
  end_html = %{</div>}
  content = capture(&block)     
  concat(begin_html, block.binding)     
  concat(content, block.binding)     
  concat(end_html,block.binding)   
end   


สิ่งที่ return ออกมาคือ HTML ที่ถูก code ของเราครอบไว้แล้ว
blog comments powered by Disqus