การทำ highlight ให้ text ของ Rails

งานที่ทำในตอนนี้ต้องทำในส่วนของการค้นหา โดยต้องมี highlight ให้ text ที่ตรงกับคำค้นหา ซึ่งการให้ทำ highlight นั้น Rails Framework ได้เตรียม text_helper ไว้ให้ใช้งานแล้ว โดยมีลักษณะดังนี้

highlight(text, phrase, highlighter = '<font color="#ff0000">\1</font>')

ตัวอย่าง คือ <%= highlight('You searched for: rails', 'rails') %>
ผลลัพธ์ที่ได้ คือ You searched for: rails

แต่ข้อด้อย คือ ไม่รองรับการทำ highlight ของคำหลายๆ คำ เช่น
ตัวอย่าง คือ <%= highlight('You searched for: ruby on rails', 'rails ruby') %>
ผลลัพธ์ที่ได้ คือ You searched for: ruby on rails
ผลลัพธ์ที่ต้องการ คือ You searched for: ruby on rails

หลังจากทดสอบแล้วว่ามันคงตามที่เราต้องการไม่ได้ ผมจึงคิดเขียนเพิ่มขึ้นมาเอง แต่เพื่อประหยัดเวลาและคิดว่าคงมีคิดเหมือนเรา ดังนั้น Google จึงเป็นทางเลือกที่ดีที่สุด และก็ได้พบกับ Rails Trac (กะไว้แล้วว่าต้องมีคนทำไว้ . . . สบาย) โดยต้องเพิ่มส่วน code ข้างล่างลงใน application_helper.rb

def highlight(text, phrases, highlighter = '<font color="#ff0000" class="highlight">\1</font>')
  if text.blank? || phrases.blank?
    text
  else
    phrase = phrases.split(‘ ‘).to_a
    match = Array(phrase).map do |p|
      p.split(//u).map do |x|
        Regexp.escape(x)
      end.join
    end.join(|)
    text.gsub(/(#{match})/i, highlighter)
  end
end

ตัวอย่าง คือ <%= highlight('You searched for: ruby on rails', 'rails ruby') %>
ผลลัพธ์ที่ได้ คือ You searched for: ruby on rails

ปล. ผมได้ทำการทดสอบกับภาษาไทยแล้ว ยังไม่เจอปัญหาใดๆ หากใครเจอก็เอามาบอกด้วยละกัน ช่วยๆกันแก้

คำแนะนำเพิ่มเติม: เขียน CSS ของ highlight ด้วยจะได้เห็นชัดเจนมากยิ่งขึ้น