La différence entre le Rendu et le Rendu Partiel et le Rendement
Je l'ai lu dans le cas des Rails guides, Ont cherché à Micheal Hartel livre et de la lecture à partir de Rails de Vue livre, mais encore je m'embrouille 🙁
Il y a un _footer.html.erb
fichier de sorte qu'il est "partielle" et dans le code qu'il a écrit:
<%=render 'layouts/footer' %>
si ma compréhension est que quand il voit que ça, va et insérer le code HTML pour le fichier de pied de page ici. Ok...
Maintenant, quelques pages plus loin il est dit:
<%= render partial: 'activitiy_items/recent' %>
alors POURQUOI cette fois, nous avons le mot "partielle" ici, mais nous ne l'avons pas dans la précédente?
Et il y a quelque part d'autre, je vois <%= yield :sidebar %>
Donc ce yield
également insérer du code HTML dans sa place? Bien n'était-ce pas ce que render
était en train de faire?
J'espérais que si un autre programmeur au lieu de livres explique ce à moi peut-être je reçois cette fois-ci:)
Vous devez vous connecter pour publier un commentaire.
render
&render partial:
render 'some_view'
est un raccourci pourrender partial: 'some_view'
.render file: 'view'
va chercher un fichierview.html.erb
et PAS_view.html.erb
(.erb
ou tout autre moteur de rendu que vous utilisez)render
ne sera pas accepter des variables locales pour le partiel, vous devez utiliserrender partial:
comme suit:(http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables)
yield
&content_for
yield
est généralement utilisé dans dispositions. Il dit à Rails de mettre le contenu de ce bloc à que place dans la mise en page.yield :something
associés àcontent_for :something
, vous pouvez passer d'un bloc de code (affichage) pour afficher où layield :something
est placé (voir exemple ci-dessous).Un petit exemple sur le rendement:
Dans votre mise en page:
Dans l'un de vos point de vue:
Ceci va produire le code HTML suivant:
Les postes qui pourraient aider à:
Liens vers de la documentation & guides:
yield :something
appellerarender
sur le bloc de code fourni dans uncontent_for :something
.render
produira juste le HTML quand il est appelé.yield
est un Rubis de mots - clés n'est pas spécifique aux Rails. J'ai eu un moment difficile enveloppant ma tête autour de lui lorsque je est venu de Java et PHP il y a un an.render :partial 'some/path/to/my/partial'
devrait êtrerender partial: 'some/path/to/my/partial'
Sur render render :partial et le rendement
rendu :modèle et render :partial sont deux fichiers dans les rails..
rendu :modèle sont pour la plupart créées selon une action avec la syntaxe de démonstration.html.erb
render :partial sont réutilisables, et appelé à partir de différents points de vue , sont partagés parmi le nombre de pages dans l'application et la syntaxe est _demo.html.erb
de rendement et de rendu..
Rendement est un moyen d'appeler un bloc de code avec sa sortie mais le rendu comprendra partielle d'un modèle de page où il est appelé. Dans les rails de rendement est principalement utilisé dans la mise en page alors que le rendu est utilisé à des actions ou à leurs modèles
Certains développeurs pensent de redirect_to comme une sorte de commande goto, le déplacement de l'exécution d'un endroit à un autre dans les Rails de code. Ce n'est pas correct. Votre code s'arrête et attend une nouvelle demande pour le navigateur. Il se trouve que vous avez dit au navigateur que la demande devrait faire la prochaine, en envoyant un HTTP 302 code d'état.
Tenir compte de ces actions pour voir la différence:
Avec le code sous cette forme, il y aura probablement un problème si le
@book
variable est nulle. Rappelez-vous, unrender :action
ne pas exécuter n'importe quel code de l'action cible, donc rien ne sera mis en place de @livres variable que la vue index aurez probablement besoin d'. Une façon de résoudre ce problème est de redirection au lieu de rendu:Avec ce code, le navigateur va faire une nouvelle demande pour la page d'index, le code de la méthode de l'indice est exécuté, et tout ira bien.
Le seul inconvénient de ce code est qu'il nécessite un aller-retour vers le navigateur: le navigateur demande la fin de l'action avec /books/1 et le contrôleur constate qu'il n'existe pas de livres, de sorte que le contrôleur envoie une redirection 302 réponse au navigateur en lui disant d'aller à l' /livres/, le navigateur est conforme et envoie une nouvelle demande de retour pour le contrôleur de demander pour l'action "index", le contrôleur reçoit tous les livres dans la base de données et rend l'index de modèle, pour l'envoyer vers le bas pour le navigateur qui affiche alors sur votre écran.
Alors que dans une petite application, ce temps de latence supplémentaire pourrait ne pas être un problème, il est quelque chose à penser si le temps de réponse est un sujet de préoccupation. Nous pouvons démontrer une façon de gérer cela avec un exemple artificiel:
Cela permettrait de détecter qu'il n'y a pas de livres avec l'ID spécifié, remplir le @livres variable d'instance avec tous les livres dans le modèle, puis directement le rendu de l'index.html.erb modèle, de le retourner dans le navigateur avec un flash message d'alerte pour indiquer à l'utilisateur ce qui s'est passé.