Rails: about yield

前端 未结 1 1296
孤城傲影
孤城傲影 2021-01-31 08:56

I saw some code in a Rails v2.3 app.

In layout/car_general.html.erb (this view is called by a method in cars_controller) , I saw the code:

1条回答
  •  野的像风
    2021-01-31 09:05

    Without any arguments, yield will render the template of the current controller/action. So if you're on the cars/show page, it will render views/cars/show.html.erb.

    When you pass yield an argument, it lets you define content in your templates that you want to be rendered outside of that template. For example, if your cars/show page has a specific html snippet that you want to render in the footer, you could add the following to your show template and the car_general layout:

    show.html.erb:

    <% content_for :footer do %>
      This content will show up in the footer section
    <% end %>
    

    layouts/car_general.html.erb

    <%= yield :footer %>
    

    The Rails Guide has a good section on using yield and content_for: http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield

    The API documentation for content_for is helpful too and has some other examples to follow. Note that it's for Rails 3.1.1 , but this functionality has not changed much since 2.3, if at all and should still apply for 3.0.x and 3.1.x.

    0 讨论(0)
提交回复
热议问题