Helpers ใน Rails คืออะไร?
Helper คือเมธอดที่ (ส่วนใหญ่) ใช้ในวิว (views) ของ Rails ของคุณ เพื่อแชร์โค้ดที่นำกลับมาใช้ซ้ำได้ Rails มาพร้อมกับชุดเมธอด helper ในตัว (built-in)
หนึ่งใน helper ในตัวนี้คือ time_ago_in_words
ตัวอย่าง:
time_ago_in_words(Time.now) # "less than a minute" time_ago_in_words(Time.now + 60) # "1 minute" time_ago_in_words(Time.now + 600) # "10 minutes"
เมธอดนี้ช่วยได้เมื่อคุณต้องการแสดงเวลาในรูปแบบเฉพาะนี้
Helper วิว Rails อีกตัวคือ number_to_human
ตัวอย่าง:
number_to_human(10_000) # "10 Thousand"
นี่ยอดเยี่ยมเมื่อคุณต้องการนำตัวเลขไปพิมพ์เหมือนที่คุณอ่านออกมา ทำให้รู้สึกมนุษย์ขึ้น
คุณสามารถหา helpers เพิ่มเติมในเอกสาร Ruby on Rails
แตคุณรู้ไหมว่าคุณสามารถเขียนของคุณเองได้?
การเขียนเมธอด Helper ของคุณเอง
หากคุณมองหาการเขียนเมธอด helper กำหนดเอง ไดเรกทอรีที่ถูกต้องคือ app/helpers
คุณเขียน helpers ภายใน helper module
ทุกแอปพลิเคชัน Rails มาพร้อมกับโมดูล helper พื้นฐานโดยค่าเริ่มต้น เรียกว่า ApplicationHelper
นี่คือที่ที่คุณสามารถเพิ่มเมธอด helper ของคุณ
เมธอดเหล่านี้จะพร้อมใช้งานสำหรับวิวทั้งหมดของคุณโดยอัตโนมัติ ภายหลังคุณจะเรียนรู้วิธีใช้ในคอนโทรลเลอร์ และทำไมนั่นอาจเป็นความคิดไม่ดี
คุณสามารถเขียน helpers ทั้งหมดใน ApplicationHelper
แตมีอีกทางเลือก...
คุณสามารถสร้างโมดูล helper เพื่อจัดระเบียบเมธอดของคุณได้ดีขึ้น
คำแนะนำ:
- สร้างไฟล์ใหม่ภายใต้
app/helpers - ตั้งชื่อว่าอย่าง
user_helper.rb - เพิ่มโมดูลใหม่ที่ตรงกับชื่อไฟล์
ตัวอย่าง:
# app/helpers/user_helper.rb
module UserHelper
def format_name(user)
if user.gender == "M"
"Mr. #{user.name}"
else
"Ms. #{user.name}"
end
end
end
โค้ดนี้สามารถใช้เพื่อเรียกบุคคลอย่างเป็นทางการโดยอิงจากเพศของพวกเขา
ประโยชน์หลัก?
คุณไม่ต้องทำซ้ำตรรกะนี้ในวิวอื่นๆ เมื่อคุณต้องการ และเมื่อคุณต้องการเปลี่ยนโค้ด... มันต้องเปลี่ยนที่เดียวเท่านั้น
ดีมาก!
การใช้โมดูล Helper ใหม่ของคุณ
คุณสามารถใช้เมธอด helper ของคุณในวิวของคุณ
แบบนี้:
<%= format_name(@user) %>
ง่ายใช่ไหม?
หากคุณต้องการใช้ helpers นอกเหนือจากวิว คุณจะต้องการสิ่งอื่น
วิธีใช้ Helpers จากคอนโทรลเลอร์
เป็นไปได้ แตไม่ค่อยพบ บางครั้ง ที่จะใช้เมธอด helper จากการกระทำคอนโทรลเลอร์
ก่อน Rails 5 คุณต้อง include โมดูล helper
ในรุ่นใหม่กว่า คุณสามารถใช้ helpers ในคอนโทรลเลอร์ของคุณด้วยออบเจ็กต์ helpers (พหูพจน์)
แบบนี้:
class UsersController
def index
helpers.time_ago_in_words(Time.now)
end
end
วิธีนี้คุณสามารถใช้ helpers จากคอนโทรลเลอร์ของคุณ แตคิดสองครั้งก่อนทำ เพราะอาจเป็นปัญหาด้านการออกแบบ
พิจารณาใช้ plain Ruby object แทน
สนุกกับ Rails Console
ผมชอบใช้ Rails console (irb พร้อมแอป Rails ของคุณโหลด) เพื่อลองเมธอดและเล่นกับสิ่งต่างๆ
Helpers รวมอยู่ด้วย!
คุณสามารถใช้ helpers จากคอนโซลด้วย helper.method_name
สังเกตรูปแบบเอกพจน์ของ "helper" เพื่อไม่ให้ได้ข้อความข้อผิดพลาด และจำไว้ว่าคอนโซลไม่โหลดการเปลี่ยนแปลงโค้ดโดยอัตโนมัติ
แนวทางปฏิบัติที่ดีสำหรับการเขียน Rails View Helpers
เมื่อไหร่ควรสร้างเมธอด helper?
เมื่อใดก็ตามที่คุณมีตรรกะที่ผลิตชิ้นส่วน HTML
ปกติแล้วสิ่งนี้จะอยู่ในหนึ่งในสองหมวดหมู่ หนึ่งคือการจัดรูปแบบสตริง และอีกอันคือองค์ประกอบหน้าที่มีเงื่อนไข
เคล็ดลับอีกอย่าง...
หากคุณต้องการเขียน helpers ที่ดี อย่าใช้ตัวแปรอินสแตนซ์ (instance variables) พวกมันอาจพร้อมใช้งานในวิวปัจจุบันของคุณ แตอาจไม่ได้ในวิวอื่น
สิ่งนี้นำไปสู่ข้อผิดพลาดเพราะตัวแปรหายไป
วิธีแก้?
ใช้พารามิเตอร์ (parameters) เพื่อให้ข้อมูลที่เมธอดของคุณต้องการเป็น ชัดเจนและระบุชัด
# wrong way def eat_healthy @fruit.eat end # do this instead def eat_healthy(fruit) fruit.eat end
เคล็ดลับสุดท้ายของผมคือ แบ่ง helpers ของคุณเป็นโมดูล ที่ชื่อแต่ละโมดูลอธิบายได้ชัดเจนว่ามันมีเมธอดประเภทไหน
อย่างไรก็ตาม:
สิ่งนี้จะไม่ช่วยกับชื่อเมธอดซ้ำ ซึ่งอาจทำให้เกิดข้อผิดพลาดและความสับสน
ทุก helpers ของคุณควรมี ชื่อที่ไม่ซ้ำกัน
เป็นทางเลือก ลองใช้ presenter objects ตามที่อธิบายในคู่มือนี้
สรุป
คุณได้เรียนรู้เกี่ยวกับ helpers ใน Rails แล้ว! ชุดเมธอดยูทิลิตี้ที่คุณสามารถใช้สำหรับจัดรูปแบบและจัดการตรรกะที่ซับซ้อนในวิวของคุณ
ตอนนี้ถึงเวลาสร้าง helpers ของคุณเอง
ขอบคุณที่อ่าน 🙂