Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เชี่ยวชาญ Rails Helpers: คู่มือสมบูรณ์สำหรับเมธอดวิวที่นำกลับมาใช้ซ้ำ

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 ของคุณเอง

ขอบคุณที่อ่าน 🙂