2017-06-29 3 views
1

J'ai commencé à jouer avec ruby ​​et j'ai très peu d'expérience en développement web. J'essaie de comprendre comment fonctionne l'injection de code ruby ​​avec des extraits de rendement. J'été bidouiller le code du livre exemple de GoogleComment les rendements savent-ils où saisir l'extrait html correct?

https://github.com/GoogleCloudPlatform/getting-started-ruby/blob/master/5-logging/app/views/layouts/application.html.erb

Je cherche actuellement à ce bout de code dans la vue principale/layout/répertoire

<div class="container"> 
    <% if flash.any? %> 
    <% flash.each do |type, message| %> 
     <div class="alert alert-<%= type %>"><%= message %></div> 
    <% end %> 
    <% end %> 
    <%= yield %> 
</div> 

Je suis coincé à comprendre comment des liens de rendement à/Voir/Livres/index.html.erb

https://github.com/GoogleCloudPlatform/getting-started-ruby/blob/master/5-logging/app/views/books/index.html.erb

 <h3>Books</h3> 

    <%= link_to new_book_path, class: "btn btn-success btn-sm" do %> 
     <i class="glyphicon glyphicon-plus"></i> 
     <span>Add Book</span> 
    <% end %> 

    <% @books.each do |book| %> 
     <div class="book media"> 
     <%= link_to book_path(book) do %> 
      <div class="media-left"> 
      <img src="<%= book.image_url %>"> 
      </div> 
      <div class="media-body"> 
      <h4><%= book.title %></h4> 
      <p><%= book.author %></p> 
      </div> 
     <% end %> 
     </div> 
    <% end %> 

    <%= render "pagination_link" %> 

    <% if @books.none? %> 
     <p>No books found.</p> 
    <% end %> 

Voici un parcours de râteau de sorte que vous n'avez pas à l'exécuter

  rake routes 
       Prefix Verb URI Pattern       Controller#Action 
        books GET /books(.:format)      books#index 
         POST /books(.:format)      books#create 
       new_book GET /books/new(.:format)     books#new 
       edit_book GET /books/:id/edit(.:format)    books#edit 
        book GET /books/:id(.:format)     books#show 
         PATCH /books/:id(.:format)     books#update 
         PUT /books/:id(.:format)     books#update 
         DELETE /books/:id(.:format)     books#destroy 
         login GET /login(.:format)     redirect(301, /auth/google_oauth2) auth_google_oauth2_callback GET /auth/google_oauth2/callback(.:format) sessions#create 
       session POST /session(.:format)      sessions#create 
         DELETE /session(.:format)      sessions#destroy 
       user_books GET /user_books(.:format)     user_books#index 
       logout GET /logout(.:format)      sessions#destroy 
        root GET /         books#index 
+0

Avez-vous déjà étudié [Understanding yield] (http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield)? – jvillian

+0

J'ai déjà essayé de lire ce lien. Je suis toujours confus. Tout semble si implicite. Il est vraiment difficile de trouver des mots-clés interrogeables pour comprendre le code – user1462442

+1

Cela pourrait aussi aider: ['ActionView :: Layouts'] (http://api.rubyonrails.org/classes/ActionView/Layouts.html) – Stefan

Répondre

1

Il ne cherche pas à trouver la vue. Il transmet simplement le contrôle au contrôleur, de sorte que le contrôleur puisse décider quelle vue afficher.

+0

Alors, où le application transmis le contrôle au contrôleur? Le problème avec ruby ​​sur rails que tout est si implicite que je ne peux même pas lire des tutoriels car le framework fait de la magie noire partout. Tous les liens fournis n'expliquent pas vraiment le manque de code ci-dessus – user1462442

+1

@ user1462442 Le routeur Rails est ce qui fait correspondre les URL aux contrôleurs/actions et les répartit en conséquence. Après cela, ce guide Rails devrait vous expliquer tout ce dont vous avez besoin: http://guides.rubyonrails.org/layouts_and_rendering.html#overview-how-the-pieces-fit-together Donc tout le processus va un peu comme ceci (simplifié): demande hits serveur d'application - le routeur Rails correspond à l'URL de la requête à une action du contrôleur - l'action effectue son travail et rend une réponse. L'emplacement exact des vues, etc., peut être déduit à cause de l'approche de Rails "convention over configuration". –

+0

@ Michael Kohl base sur votre commentaire. Puisque root est spécifié comme index de livre. Lorsque l'utilisateur appelle, rails cartes qui appellent à htts :: //bookself.com/ -> livre # index -> BookContoller -> render book.erb -> "rendement" (application.erb) – user1462442

2

yield fait partie de block syntax Ruby.

def hello 
    "Hello, #{yield}!" 
end 

> hello { "World" } 
# => "Hello, World!" 

Dans cet exemple, les rendements de la méthode hello au bloc on passe pour obtenir une valeur, et il ajoute à la chaîne. Pensez aux modèles comme étant un type spécial de fichier pour créer des fonctions qui génèrent du code HTML. Les dispositions et les partiels sont des moyens d'intégrer des modèles les uns dans les autres, tout comme vous pouvez appeler une fonction depuis une autre fonction. Vos modèles sont rendus par le contrôleur, afin qu'il sache quelle vue doit être restituée et à quelle disposition il appartient en fonction de Rails conventions.

+0

Oui, je comprends que le rendement reçoit une valeur. Mon problème est de comprendre comment il sait quel contrôleur pour rendre le bloc de rendement. Je l'ai déjà pris un coup d'œil à la fois le contrôleur d'application et de l'image https://github.com/GoogleCloudPlatform/getting-started-ruby/blob/master/5-logging/app/controllers/application_controller.rb https://github.com/GoogleCloudPlatform/getting-started-ruby/blob/master/5-logging/app/controllers/books_controller.rb Je n'arrive toujours pas à trouver la ligne qui spécifie quoi que ce soit – user1462442

+0

Le mot-clé 'yield' ne fonctionne pas ici, il dit simplement à Ruby de céder l'exécution à un autre morceau de code. Le contrôleur est la chose qui exécute l'exécution en premier lieu. –