Rails: confus au sujet de la syntaxe pour le passage des habitants de partiels
Compréhension des Rails de "magie" en ce qui concerne le rendu des partiels (et en passant les habitants dans leur).
Pourquoi ce travail:
<%= render "rabbits/form" %>
Et ce travail:
<%= render "rabbits/form", :parent => @warren, :flash => flash %>
mais cela ne pas travail:
<%= render "rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Mais ce n':
<%= render :partial =>"rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Aussi, comment puis-je rechercher ces nuances, je n'ai pas besoin de déranger les gens sur S. O.?
- Dans un commentaire ci-dessous vous disiez que les rails de l'api docs ne sont pas consultables. Vous devriez essayer ce site à la place: apidock.com/rails. Il a également ruby et rspec sur il.
Vous devez vous connecter pour publier un commentaire.
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 comprend
: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 la:locals => {locals hash}
, au lieu de simplement{locals hash}
; c'est à dire, vous vous retrouvez avec:locals => {:locals => {locals hash}}
, plutôt que de: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 dans les Rails 2; Rails 3 est différent). C'est un bon exercice.En outre, ne vous inquiétez pas "déranger" les gens sur DONC. C'est pourquoi ce site existe. J'ai même appris quelque chose de cette.
si vous avez besoin de spécifier :les locaux, vous devez spécifier :partielle ou :modèle
devrait fonctionner
clone https://github.com/rails/rails.git
? ou est-il un meilleur moyen? Désolé, mais je suis relativement nouveau à RoR, et n'ai pas encore trouvé un bon/facile/moyen cohérent de rechercher les Rails de la documentation...tels que y EST tout.http://api.rubyonrails.org/
n'est pas facilement recherche. et la source de git n'est pas non plus... soupirruby <%= render "rabbits/form" foo: "bar" %>
Être honost, je ne sais à propos de ces cas d'utilisation, parce que j'ai suivi avec des Rails pour les deux dernières années et lire les annonces d'une nouvelle façon de faire a été ajouté. Je fais souvent une erreur en moi-même, mais en général c'est facile à rectifier.
C'est une de ces pièces de Rails API qui n'a pas été entièrement été pensé pour vous, si vous me demandez. Il accumulé plus et plus de sucre syntaxique au fil des ans, sans autodérision tout de l'ancien comportement. La méthode render a le diabète.
À le rendre encore pire, le rendu se comporte différemment dans le contrôleur et la vue. Je regarde aussi le premier argument de contenu pour voir si c'est un fichier, d'un modèle d'action ou partielle. Si elle commence par une barre oblique, puis c'est un fichier, ou quelque chose comme ça.
Je suis en faveur de l'utilisation de la notation plus courte possible. Parce que le court notations faire communiquer l'intention tout à fait bien. Lors de la lecture, il n'est généralement ce que vous pensez que cela fonctionne. L'écriture n'est pas simple.
Ici est la source de la méthode de rendu de http://api.rubyonrails.org/classes/ActionView/Rendering.html#method-i-render:
Espérons que cette aide!