ทำไมผู้คนถึงไม่แนะนำให้ใช้ตัวแปรอินสแตนซ์สำหรับมุมมองใน Ruby on Rails


12

ทำไมฉันถึงได้ยินว่ามันไม่ดีที่จะแบ่งปันตัวแปรอินสแตนซ์ระหว่างตัวควบคุมและมุมมอง ฉันชอบมันเพราะฉันเห็นได้ทันทีผ่านทาง @ ว่ามีบางอย่างมาจากคอนโทรลเลอร์ ผมเห็นเป็นวิธีที่ดีที่จะใช้ผู้ช่วยเหลือในการควบคุมที่นี่: http://www.stephencelis.com/2008/09/06/rails-controllers-views-and-variables.html แต่ฉันใช้ cancan สำหรับส่วนนั้น

คำตอบ:


11

แนวความคิดนี้ถูกนำเสนอในแนวทางปฏิบัติที่ดีที่สุดของราง: แทนที่ตัวแปรอินสแตนซ์ด้วยตัวแปรโลคัล

โดยทั่วไปถ้าคุณไม่ได้ใช้หลาย ๆ Partials หรือมีมุมมองธรรมดาเพียงอย่างเดียวสำหรับแต่ละวิธีการควบคุมเพียงแค่ใช้ตัวแปรอินสแตนซ์ในมุมมองจะไม่ทำให้เกิดปัญหาใด ๆ

อย่างไรก็ตามหากคุณใช้งานหลายภาคส่วนและมีตัวแปรอินสแตนซ์จำนวนมากที่ประกาศในคอนโทรลเลอร์ของคุณ ... มันอาจจะสับสนน้อยกว่าหากคุณใช้ทางเลือกในการส่งผ่านตัวควบคุม (อินสแตนซ์) ด้วยวิธีนี้ - ในขณะที่ทำงานใน VIEW บางส่วน - คุณมีการอ้างอิงที่ชัดเจนถึงตัวแปร / วัตถุที่คุณต้องการทำงานกับที่ไม่ได้แชร์กับส่วน 'ทั้งหมด' ที่รวมอยู่ในการสร้างหน้า

ท้ายที่สุดคุณสามารถจัดการสิ่งนี้ได้ตามที่คุณต้องการจัดการมันไม่มีใครบอกให้คุณทำอย่างอื่น อย่างไรก็ตามมุมมองส่วนตัวของฉันคือฉันชอบความคิดที่มีการอ้างอิงอย่างชัดเจนในส่วนของฉัน / มุมมองที่ไม่สามารถสับสนกับตัวแปรอื่น ๆ


5

คุณสามารถรับการเปรียบเทียบจากglobalตัวแปรหรือตัวแปรที่ส่งผ่านโดยการอ้างอิงและคิดว่าเป็นส่วนหนึ่งของฟังก์ชัน ดังนั้นการใช้ตัวแปรอินสแตนซ์จึงค่อนข้างคล้ายกับตัวแปรที่ส่งผ่านไปยังฟังก์ชั่นเป็นข้อมูลอ้างอิงสำหรับทั้งหมดที่เป็นของมือโปรและคอน

# controller 
def index
  @var = 1
end

#view index.html.erb 
<%= @var %><br/>
<%= render 'foo' %><br/>
<%= @var %>

#partial _foo.html.erb
<%= @var = 2 %>

ผลลัพธ์จะเป็น

1
2
2

คุณอาจต้องการพฤติกรรมดังกล่าว แต่ในกรณีส่วนใหญ่คุณไม่ต้องการมัน และง่ายต่อการแนะนำบั๊กด้วยวิธีนี้และยากที่จะติดตามพวกมัน นี่คือสาเหตุที่แนะนำให้ทำเช่นนี้เพราะมันจะแยกขอบเขตของตัวแปรที่ใช้ในมุมมองและเนื้อหา:

#view index.html.erb 
<%= @var %><br/>
<%= render 'foo', var: @var %><br/>
<%= @var %>

#partial _foo.html.erb
<%= var = 2 %>

ผลลัพธ์:

1
2
1

2
นี่เป็นจุดที่ดีฉันไม่ได้คิดถึงความผันแปรของตัวแปร ฉันมีข้อสันนิษฐานของผู้ควบคุม "นำเสนอ" ตัวแปรในมุมมอง แต่ตัวแปรอินสแตนซ์สามารถแนะนำบั๊กได้หากมีการแก้ไข
Amala
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.