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

เชี่ยวชาญ Flash Messages ใน Rails: คู่มือสมบูรณ์

Flash messages คืออะไร?

Flash message เป็นวิธีสื่อสารข้อมูลกับผู้ใช้ของแอปพลิเคชัน Rails ของคุณ เพื่อให้พวกเขารู้ว่าสิ่งที่เกิดขึ้นเป็นผลมาจากการกระทำของพวกเขา

ตัวอย่างข้อความ:

  • "Password changed correctly" (ยืนยัน)
  • "User not found" (ข้อผิดพลาด)

คุณตั้งค่า flash messages นี้ในคอนโทรลเลอร์ของคุณ แล้วเรนเดอร์ในวิวของคุณ ผู้ใช้ของคุณสามารถดำเนินการต่อได้ตามเหมาะสม

มาเรียนรู้อย่างแน่ชัดว่าสิ่งนี้ทำงานอย่างไร!

วิธีใช้ Flash Messages

คุณสามารถทำงานกับข้อความแจ้งเตือนเหล่านี้โดยใช้เมธอด helper flash

มันทำงานคล้ายแฮช (Ruby hash) มาก

ออบเจ็กต์ flash มีเมธอดเช่น keys, any? หรือ each และคุณสามารถเข้าถึงข้อความเฉพาะได้ด้วย []

คุณสามารถตั้งค่า flash messages ได้กี่ประเภท?

โดยค่าเริ่มต้นคุณมี:

  • notice
  • alert

ตัวอย่างวิธีใช้:

flash.alert = "User not found."

หรือหากคุณชอบ:

flash[:alert] = "User not found."

(แค่ความแตกต่างของสไตล์)

คุณสามารถใช้โค้ดนี้ภายในการกระทำคอนโทรลเลอร์ของคุณ เช่น index, create, new เป็นต้น

อีกวิธีหนึ่งคือ:

redirect_to :books_path, notice: "Book not found"

สิ่งนี้อนุญาตให้คุณ redirect และสร้าง flash message ในขั้นตอนเดียว

ดี!

Alert vs Notice

ที่ผมเข้าใจ ไม่ว่าคุณจะใช้ alert หรือ notice ก็ไม่แตกต่างกันมาก

ใช้ตัวที่รู้สึก tự nhiênกว่าสำหรับสถานการณ์ของคุณ

ผมชอบคิดว่า alert เป็นข้อความข้อผิดพลาด และ notice เป็นข้อความยืนยัน

การแยกพวกมันช่วยให้คุณจัดสไตล์ต่างกันได้

ตัวอย่าง:

คุณสามารถแสดง alerts ในสีแดง และ notices ในสีเขียว

ยังเป็นไปได้ที่จะสร้าง flash types ของคุณเอง โดยใช้เมธอดคอนโทรลเลอร์ add_flash_types

แบบนี้:

class ApplicationController
  add_flash_types :info, :error, :warning
end

ผมชอบทำให้เรียบง่าย ดังนั้นผมจึงใช้ประเภทในตัว 🙂

การเรนเดอร์ Flash Messages

Flash messages ไม่ได้แสดงอัตโนมัติ

คุณต้องเรนเดอร์พวกมันภายในหนึ่งในวิวของคุณ เพื่อให้ผู้ใช้เห็น

พิจารณาเพิ่มสิ่งนี้ใน application layout ของคุณ

ตัวอย่างโค้ด:

<% flash.each do |type, msg| %>
  <%= msg %>
<% end %>

วางสิ่งนี้ที่ใดก็ตามที่คุณต้องการแสดง notice โดยปกติอยู่ด้านบนของหน้า ใต้แถบเมนู

จำไว้:

เมื่อคุณเรนเดอร์ข้อความแล้ว มันจะถูกลบออกจาก flash ดังนั้นมันจะไม่แสดงซ้ำ

การจัดสไตล์ Notice และ Alert Messages ของคุณ

Flash messages ไม่มีการออกแบบหรือสไตล์ในตัว

วิธีแก้?

หากคุณใช้ Bootstrap คุณสามารถใช้คลาส CSS "alert alert-info" เพื่อให้ flash messages ดูดี

ตัวอย่าง:

<% flash.each do |type, msg| %>
  <%= msg %>
<% end %>

มันดูแบบนี้:

เชี่ยวชาญ Flash Messages ใน Rails: คู่มือสมบูรณ์

หากคุณ ไม่ได้ ใช้ Bootstrap แล้วคุณสามารถเขียน CSS ของคุณเองเพื่อให้มันดูยังไงก็ได้

Flash Messages ถูกเรนเดอร์เมื่อไหร่?

Flash messages ถูกลบเฉพาะในการกระทำคอนโทรลเลอร์ถัดไป หลังจากที่คุณแสดงพวกมัน

นัยสำคัญ:

  • หากคุณ redirect_to แล้วเรนเดอร์ flash message นั่นดี
  • หากคุณ redirect_to และ ไม่ เรนเดอร์ข้อความ ข้อความจะค้างอยู่ในแฮช flash
  • หากคุณ render ในการกระทำเดียวกันที่คุณตั้งค่า flash message ข้อความ flash นั้นจะพร้อมใช้งาน แต ไม่ถูกลบ ดังนั้นจะค้างอยู่และอาจแสดงซ้ำ

ดังนั้น...

ถ้าคุณต้องการตั้ง flash message สำหรับการกระทำปัจจุบัน?

นั่นคือที่มาของ flash.now!

ตัวอย่าง:

def index
  @books = Book.all
  flash.now[:notice] = "We have exactly #{@books.size} books available."
end

สิ่งนี้จะเรนเดอร์วิว index

ข้อความ notice จะแสดงและถูกลบออกจาก flash ดังนั้นจะไม่แสดงซ้ำ

กล่าวอีกนัยหนึ่ง:

คุณต้องใช้ flash.now ก็ต่อเมื่อคุณจะ render แทนที่จะ redirect

สรุป

คุณได้เรียนรู้เกี่ยวกับ flash messages ใน Rails และวิธีใช้งานอย่างถูกต้องแล้ว!

Btw, flash messages ไม่เหมือนกับ validation errors Validations เกี่ยวข้องกับออบเจ็กต์โมเดล และคุณเข้าถึงข้อความการตรวจสอบได้ด้วยเมธอด errors เช่น @user.errors

ตอนนี้ถึงคุณนำไปปฏิบัติจริงโดยเขียนโค้ดบ้าง

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