Quelle est la différence entre le rendu et le rendement dans les Rails
Quelqu'un peut m'expliquer la différence entre "<%= render %>
" et "<%= yield %>
avec <% content_for :partial do %>
/<% end %>
"? comment, concrètement, les modifications de routage en passant de l'un à l'autre, les avantages de l'utilisation de l'un sur l'autre, quand il est pratique d'utiliser l'un sur l'autre. CETTE est le plus proche de l'explication que j'ai trouvé, mais ce n'est pas tout à fait assez clair pour moi.
J'ai essayé pendant plusieurs jours pour envelopper ma tête autour de cela, mais il semble que chaque configuration que j'ai essayer est proche, ou erreurs.
Si theres sont trois vues, aaa
et bbb
et ccc
, et chacun a un index.html.erb
, mais bbb
et ccc
ont un _content.html.erb
partielle (indiqué par le trait de soulignement) comment pouvez-vous accomplir l'obtention de la bbb
ou ccc
partielle dans aaa
en utilisant soit render
ou yield
?
Les ouvrages suivants:
aaa
'index.html.erb :
<div">
<%= render 'bbb/content' %>
</div>
et bbb
s _content.html/erb :
<p>Content from bbb.</p>
MAIS ce n'est PAS:
aaa
'index.html.erb :
<div">
<%= yield :container %>
</div>
et bbb
s _content.html/erb :
<% content_for :container do %>
<p>Content from bbb.</p> ### viewed in aaa
<% end>
et ccc
s _content.html.erb aurait rien, ou le content_for
, mais je persiste à ne pas se faire aaa
's index.html à être rempli avec le contenu.
Si j'utilise le rendu, je peux explicitement placer le contenu dans. Mais je pense que l'avantage de l'utilisation de la yield :whatever
me permettrait de choisir les éléments à remplir avec, et je n'arrive pas à remplir quelque chose dès que je change de rendre à céder. Dois-je également mettre à jour le fichier de routes? Si oui, comment puis-je choisir celui qui à le remplir avec des? Est-ce à dire sa dans le contrôleur? et les besoins d'une action?
J'ai aussi bien que cela dépend du fichier est d'abord acheminé vers, mais comme je l'ai dit, je pense que j'ai besoin de comprendre la différence entre les deux avant que je puisse commencer à utiliser les partiels à mon avantage.
Je ne pense pas qu'il y est assez de précisions, plus précisément depuis que je ne peux pas obtenir la
yield
de travail, et j'ai fait des recherches sur les liens, c'est pourquoi je demande des précisions ou une explication différente.Consultez ce lien stackoverflow.com/questions/6299851/...
OriginalL'auteur chris Frisina | 2013-01-17
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, le rendement est le rubis, le rendu des rails. Généralement on utilise une mise en commun de la demande intérieure dont le contenu change en fonction de l'action/contexte. Le problème se trouve généralement dans la définition de où notre présentation se termine et le contexte spécifique de modèle commence. Prenez, par exemple, la HTML balise de titre. Disons que vous avez une application appelée Villes. Dans la plupart des cas, vous voulez que votre titre de la page pour être les "Villes" de tous les temps. Mais, si vous êtes, par exemple, à l'intérieur de Amsterdam, puis vous aimeriez l'avoir "Amsterdam", comme le titre de votre page.
Dans les Rails-vous habituellement à définir votre demande de titre dans votre application de mise en page. Une stratégie pour changer le titre de la page serait d'utiliser content_for dans les villes de modèle et le modifier en conséquence.
De rendu, d'autre part, accomplit différentes rendu des stratégies. Droite. Lorsque vous appelez le rendu, il rend. content_for/rendement ne rend pas automatiquement, il est stocké quelque part et puis remplit le manque spots dans les lieux. Ainsi, vous pouvez penser à elle comme de plus en plus comme un "store/rechercher/remplacer" en comparaison à rendre, ce qui rend tout simplement.
Bonne règle de base pour utiliser l'un sur l'autre est la suivante: si le modèle que vous écrivez doit présenter des informations différentes par contexte, fortement envisager d'utiliser content_for.
il se doit, et c'est maintenant, merci pour la clinique de l'oeil 😉
OriginalL'auteur ChuckE
yield
Code Ruby (Proc classe) et prend votre bloc et fait ce qu'il est censé faire avec elle. Le rendement est également rapide en comparaison avec d'autres Ruby basé façons de faire la même chose.
Je suppose (et j'ai seulement) l'utiliser dans les mises en page, parce que c'est rapide et j'ai bêtement faire ce qui est normal dans les Rails.
yield
est également utilisé pour passer d'un contenu à un endroit précis de votre mise en page. J'ai souvent<%= yield :head %>
dans la tête, juste au-dessus de la balise head, afin que je puisse passer aléatoire étrangeté qui vient parfois jusqu'.Utilisations Courantes:
énoncé.
render
Rails de code que vous avez passer des arguments à que les, que les docs disent, "Rend le contenu qui sera renvoyé au navigateur que le corps de la réponse". partiels, les actions, textes, fichiers, etc...
Utilisations Courantes:
Utilisés dans les deux points de vue et le contrôleur.
OriginalL'auteur pjammer
Lors de votre contrôleur de sortie de la méthode, il rend le fichier associé. Donc le modifier contrôleur rend modifier.html.erb. Il utilise le modèle spécifique ou de l'application.html.erb si aucun n'est spécifié.
Dans votre fichier de mise en page, lorsque vous appelez
yield
il aura à remplir les informations de votre rendu. Si vous appelezyield
avec un paramètre, il le recherche uncontent_for
section dans votre rendu fichier correspondant à ce paramètre. Je ne suis pas complètement sûr, mais je ne pense pas que vous pouvez appeleryield
de l'extérieur de votre fichier de mise en page, et je ne pense pas que cela va remplir toute information exception qui se trouve dans votre fichier de rendu.N'importe où dans votre fichier de mise en page ou de votre fichier de rendu, vous pouvez rendre un partiel en appelant
render
avec le nom partiel moins le trait de soulignement.J'espère que ça aide.
Modifier pour répondre à la question en commentaire:
yield
etrender
fonctions similaires toutefoisyield
recherche uniquement dans les fichiers de rendu alors querender
spécifie le fichier de rendu. Aussi,render
sorties de l'ensemble du dossier, maisyield
avec un paramètre de sortie peut juste un paragraphe du fichier.layout file
etrendered file
pouvez-vous donner un exemple d'utilisation de
yield
/content_for
qui pourrait également être réalisée à l'aiderender
, ou deux exemples qui expliquent pourquoi ils ne sont pas les mêmes?En supposant que contrôleur de
:users
et de la méthode de:new
avec pas d'appels àrender
oulayout
dans votre contrôleur le fichier de configuration est dans/app / views/layouts/de l'application.html.erb et les fichiers de rendu est dans app/views/users/new.html.erb.donc, il n'est pas possible d'utiliser
yield
à partir d'autres points de vue?Ce n'est certainement pas l'intention, mais comme avec la plupart des choses dans les Rails, vous pourriez probablement trouver un moyen de le faire si vous avez été têtu.
OriginalL'auteur Geoff