สมมติว่าเรามีโมเดล Book และ Review ที่ associate กันอยู่
แล้วเราต้องการแสดงข้อมูลใน Review จากหน้า show ของ Book โดยโค้ดของหน้า show มีหน้าตาประมาณนี้
แล้วเราต้องการแสดงข้อมูลใน Review จากหน้า show ของ Book โดยโค้ดของหน้า show มีหน้าตาประมาณนี้
/app/views/books/show.html.erb
…
<$= render @book.reviews %>
…
…
<$= render @book.reviews %>
…
เมื่อใช้ render แบบนี้ สิ่งที่เกิดขึ้นคือ
- ไฟล์ partial ของ Review จะถูกเรียกขึ้นมารัน เพราะมีการใส่ argument เป็น instance ของโมเดล Reviews ลงไป (ซึ่งก็คือ @book.reviews) ในที่นี้ไฟล์ partial ที่ถูเรียกจะเป็น /app/views/reviews/_review.html.erb
- Rails จะสร้างตัวแปร local ที่มีชื่อดียวกับ partial เอาไว้โดยอัตโนมัติ (ไม่นับเครื่องหมายขึดล่าง ในที่นี้ไฟล์ partial ชื่อ _review.html.erb จะมีตัวแปรชื่อ review) ค่าของตัวแปร local ที่ Rails สร้างขึ้นจะอ้างอิงไปยัง instance ของโมเดลที่ใส่เข้ามาตอนเรียกใช้ render (ในที่นี้ก็คือ อ็อบเจกต์ @book.reviews ซึงเป็น instance ของโมเดล Review )
/app/views/reviews/_review.html.erb
<%= review.rating %>
<%= review.rating %>
<%= review.rating %>
<%= review.rating %>
รายละเอียดเพิ่มเติมอยู่ในหัวข้อ 3.4.4 Passing Local Variables จากหน้า Rails Guide - Layout and Randering ครับ