2016-12-29 3 views
0

Ich habe leider eine Anwendung auf Rails 2.3.18 ausgeführt und sehe seltsames Verhalten mit der Variablen params innerhalb der Controller. Es gibt einige Bereiche der App, die (aus irgendeinem Grund) sich selbst Params zuweisen oder standardmäßig ein leerer Hash. params = (params || {}) Jetzt wird die params-Variable initialisiert, um die Anforderungsparameter zu sein, so dass sie in einem logischen Ausdruck als wahr ausgewertet werden sollte. In diesem Fall wird params jedoch auf {} gesetzt. Warum genau passiert das?Param-Zuweisung in Rails 2.3.18

Antwort

2

Ich habe keine Rails 2.3 App mit zu spielen, aber params in einer Steuerung ist eigentlich Methode aber sagen params = ... erstellt eine lokale Variable, die die Standard params Methode Schatten. Zum Beispiel, versuchen Sie dies in irb:

def x 
    puts 'x is being called' 
    { :where_is => 'pancakes house?' } 
end 
x = x || { } 

und Sie werden sehen, dass x{ } ist und die x Methode wird nie selbst genannt. Der Code, der sagt:

params = (params || {}) 

ist dies effektiv zu tun:

params = nil # Declare a local variable and initialize it to nil 
params = params || { } 
# -------^^^^^^ the local variable above, not the method 

Wenn Sie jedoch die RHS params zwingen, ein Methodenaufruf zu sein:

params = params() || { } 
# -------------^^ 

dann sollte es nennen Methode, aber Sie haben immer noch die lokale params Variable auf der LHS der Zuordnung.

Ich denke, Sie müssen herausfinden, warum der Code tut params = params || { } und Refactor es so, dass es nicht notwendig ist. Versuchen diese Controller-Methoden zu funktionieren, wenn sie nicht wirklich in einem Controller sind? Sind sie in älteren Versionen von Ruby auf zwielichtige Fälle angewiesen? War dieser Code Cargo-Kult-Stil von jemandem hinzugefügt, der Mystery-Code aus einem Blog kopierte, den er nicht verstand?

+0

Es sieht so aus, als ob das tatsächlich passiert ist. Mir war nicht bewusst, dass Methoden in diesen Szenarien explizit aufgerufen werden müssen. Vielen Dank! – user2977636