收益率如何知道在哪里获取正确的html片段?

时间:2017-06-29 01:29:24

标签: ruby-on-rails ruby yield

我开始搞乱ruby,我的网络开发经验很少。我试图了解ruby代码注入如何与yield snippets一起使用。我一直在攻击谷歌的示例书代码

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

我目前正在主视图/ layout /目录中查看此代码段

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

我很难搞清楚如何将链接转到/view/books/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 %>

这是一个rake路线,所以你不必运行它

           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

2 个答案:

答案 0 :(得分:2)

yield是Ruby&#39; block syntax的一部分。

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

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

在此示例中,hello方法生成我们传入的块以获取值,并将其添加到字符串中。

将模板视为一种特殊类型的文件,用于创建生成html的函数。布局和局部是将模板嵌入到另一个内部的方法,就像您可以从另一个函数中调用函数一样。

您的模板由Controller呈现,因此它根据Rails conventions知道需要呈现的视图以及它所属的布局。

答案 1 :(得分:1)

它没有尝试查找视图。它只是将控件传递给控制器​​,以便控制器可以决定渲染哪个视图。