Warum empfehlen die Benutzer, keine Instanzvariablen für Ansichten in Ruby on Rails zu verwenden?


Antworten:


11

Die Idee wurde in bewährten Methoden für Rails umgesetzt: Ersetzen Sie die Instanzvariable durch die lokale Variable

Wenn Sie nicht viele Partials verwenden oder für jede Controllermethode nur eine einfache Ansicht haben, würde die Verwendung der Instanzvariablen in der Ansicht keine wirklichen Probleme verursachen.

Wenn Sie jedoch viele Partials verwenden und daher viele Instanzvariablen in Ihrem Controller deklariert haben, ist es möglicherweise weniger verwirrend, wenn Sie die Alternative verwenden, die Controller- (Instanz-) Variable explizit an die Partials zu übergeben. Auf diese Weise haben Sie - während Sie in der partiellen VIEW arbeiten - einen expliziten Verweis auf die Variable / das Objekt, mit dem Sie arbeiten möchten, der / das nicht mit allen Partials geteilt wird, die in der Erstellung der Seite enthalten sind.

Schließlich können Sie damit umgehen, wie Sie es möchten, und niemand wird Ihnen sagen, dass Sie es anders machen sollen. Mein persönlicher Standpunkt ist jedoch, dass ich die Idee mag, explizit Referenzen in meinen Teilansichten zu haben, die nicht mit anderen Variablen verwechselt werden können.


5

Sie können die Analogie aus globalVariablen oder Variablen abrufen, die als Referenz übergeben wurden, und Partials als Funktionen betrachten. Die Verwendung der Instanzvariablen ähnelt also der Variablen, die als Referenz für alle Vor- und Nachteile übergeben wird:

# controller 
def index
  @var = 1
end

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

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

Ergebnis wird sein

1
2
2

Möglicherweise möchten Sie ein solches Verhalten, in den meisten Fällen benötigen Sie es jedoch nicht. Und es ist einfacher, Fehler auf diese Weise einzuführen und schwerer zu verfolgen. Das ist der Grund, warum dies empfohlen wird, da es die Bereiche von Variablen trennt, die in Ansichten und Teilbereichen verwendet werden:

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

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

Ergebnis:

1
2
1

2
Dies ist ein guter Punkt, ich habe nicht über die Veränderbarkeit der Variablen nachgedacht. Ich hatte die Annahme, dass der Controller die Variablen den Ansichten "präsentiert", aber Instanzvariablen können definitiv Fehler einbringen, wenn sie modifiziert werden.
Amala,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.