หน้าเว็บ

วันศุกร์ที่ 29 กรกฎาคม พ.ศ. 2559

การเรียกใช้ render พร้อมกับส่ง instance ของโมเดล





สมมติว่าเรามีโมเดล Book และ Review ที่ associate กันอยู่
แล้วเราต้องการแสดงข้อมูลใน Review จากหน้า show ของ Book โดยโค้ดของหน้า show มีหน้าตาประมาณนี้
/app/views/books/show.html.erb


<$= render @book.reviews %>
เมื่อใช้ render แบบนี้ สิ่งที่เกิดขึ้นคือ

  1. ไฟล์ partial ของ Review จะถูกเรียกขึ้นมารัน เพราะมีการใส่ argument เป็น instance ของโมเดล Reviews ลงไป (ซึ่งก็คือ @book.reviews) ในที่นี้ไฟล์ partial ที่ถูเรียกจะเป็น /app/views/reviews/_review.html.erb
  2. Rails จะสร้างตัวแปร local ที่มีชื่อดียวกับ partial เอาไว้โดยอัตโนมัติ (ไม่นับเครื่องหมายขึดล่าง ในที่นี้ไฟล์ partial ชื่อ _review.html.erb จะมีตัวแปรชื่อ review) ค่าของตัวแปร local ที่ Rails สร้างขึ้นจะอ้างอิงไปยัง instance ของโมเดลที่ใส่เข้ามาตอนเรียกใช้ render (ในที่นี้ก็คือ อ็อบเจกต์ @book.reviews ซึงเป็น instance ของโมเดล Review )
การแสดงผลในไฟล์ partial จึงเขียนออกมาได้แบบนี้

/app/views/reviews/_review.html.erb
<%= review.rating %>
<%= review.rating %>

รายละเอียดเพิ่มเติมอยู่ในหัวข้อ 3.4.4 Passing Local Variables จากหน้า Rails Guide - Layout and Randering ครับ

2 ความคิดเห็น:

  1. I explore your all post and found some great information about Ruby on Rails which is definitely useful for me in the future

    Excellent blog its very interesting to read. it contain really helpfull information.
    for all students on here we have an all assignment service to help you guys to complete their assignment.

    Ruby assignment help

    ตอบลบ