La réponse courte est la méthode render regarde le premier argument que vous transmettez. Si vous passez dans une table de hachage (qui inclut :partial => 'foo', :locals => {blah blah blah}
) puis il va passer dans tous vos arguments d'un algorithme de hachage et de les interpréter en conséquence.
Si vous passez une chaîne de caractères en tant que votre premier argument, il suppose que le premier argument est votre nom partiel, et va passer le reste de vos locaux. Cependant, dans cet appel, il attribue en fait :locals => your_locals_argument
, qui dans ce cas est l'ensemble de l' :locals => {locals hash}
, au lieu de simplement en {locals hash}
; c'est à dire, vous vous retrouvez avec :locals => {:locals => {locals hash}}
, plutôt que d' :locals => {locals hash}
.
Donc, mon conseil est de ne pas transmettre explicitement les valeurs de la même manière tout le temps, et vous n'aurez pas de problèmes. Afin d'apprendre à ce sujet, je suis allé directement sur le code lui-même (actionpack/lib/base.rb, render()
méthode de Rails 2; Rails 3 est différent). C'est un bon exercice.
En outre, ne vous inquiétez pas "déranger" les gens sur. C'est pourquoi ce site existe. J'ai même appris quelque chose de cela.