Comprendre la «magie» des Rails en ce qui concerne le rendu des partiels (et le passage des sections locales).
Pourquoi ça marche:
<%= render "rabbits/form" %>
Et ce travail:
<%= render "rabbits/form", :parent => @warren, :flash => flash %>
mais cela ne fonctionne pas :
<%= render "rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Mais cela fait:
<%= render :partial =>"rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Aussi, comment puis-je rechercher ces nuances pour ne pas avoir à déranger les gens sur SO?
ruby-on-rails
partial-views
Meltemi
la source
la source
Réponses:
La réponse courte est que la méthode de rendu examine le premier argument que vous passez. Si vous passez un hachage (qui inclut
:partial => 'foo', :locals => {blah blah blah}
), alors il passera tous vos arguments sous forme de hachage et les analysera en conséquence.Si vous passez une chaîne comme premier argument, il suppose que le premier argument est votre nom partiel et transmettra le reste comme vos locaux. Cependant, dans cet appel suivant, il attribue en fait
:locals => your_locals_argument
, qui dans ce cas est le tout:locals => {locals hash}
, au lieu de juste{locals hash}
; c'est-à-dire que vous vous retrouvez avec:locals => {:locals => {locals hash}}
, plutôt que:locals => {locals hash}
.Mon conseil est donc de toujours transmettre explicitement les valeurs de la même manière tout le temps, et vous n'aurez aucun problème. Pour en savoir plus, je suis allé directement au code lui-même ( actionpack / lib / base.rb ,
render()
méthode dans Rails 2; Rails 3 est différent). C'est un bon exercice.De plus, ne vous inquiétez pas de «déranger» les gens sur SO. C'est pourquoi ce site existe. J'ai même appris quelque chose de cela.
la source
si vous devez spécifier: locaux, vous devez spécifier: partiel ou: modèle
devrait marcher
la source
clone https://github.com/rails/rails.git
? ou y a-t-il un meilleur moyen? Désolé mais je suis relativement nouveau pour RoR et n'ont pas encore trouvé un bon / moyen facile / cohérente pour consulter la documentation Rails ... tel qu'il EST tout.http://api.rubyonrails.org/
n'est pas facilement consultable. et la source de git n'est pas non plus ... soupirPour être honnête, je ne connais que ces cas d'utilisation, car je suis au courant de Rails depuis quelques années et j'ai lu les annonces selon lesquelles une nouvelle façon de faire a été ajoutée. Je fais souvent une erreur moi-même, mais généralement c'est facilement corrigé.
C'est l'une de ces parties de l'API Rails qui n'a pas été complètement réfléchie, si vous me le demandez. Il a juste accumulé de plus en plus de sucre syntaxique au fil des ans, sans déprécier aucun des anciens comportements. La méthode de rendu a le diabète.
Pour aggraver les choses, le rendu se comporte différemment dans le contrôleur et la vue. Je regarde également le contenu du premier argument pour voir s'il s'agit d'un fichier, d'un modèle, d'une action ou d'un partiel. Si cela commence par une barre oblique, c'est un fichier, ou quelque chose comme ça.
Je suis favorable à l'utilisation de la notation plus courte chaque fois que possible. Parce que les courtes notations communiquent assez bien l'intention. En le lisant, il fait généralement ce que vous pensez qu'il fait. L'écriture de partiels n'est pas simple.
la source
Voici la source de la méthode de rendu sur http://api.rubyonrails.org/classes/ActionView/Rendering.html#method-i-render :
J'espère que cette aide!
la source