Difference between Render and Render Partial and Yield

render & render partial:

  • render 'some_view' is a shorthand for render partial: 'some_view'.

  • render file: 'view' will look for a file view.html.erb and NOT _view.html.erb (.erb or any other renderer you use)

  • render can pass local variables for the partial if you do not use collections or layouts, like

     render 'some/path/to/my/partial', custom_var: 'Hello'
    

yield & content_for

  • yield is typically used in layouts. It tells Rails to put the content for this block at that place in the layout.
  • When you do yield :something associated with content_for :something, you can pass a block of code (view) to display where the yield :something is placed (see example below).

A small example about yield:

In your layout:

<html>
<head>
 <%= yield :html_head %>
</head>
<body>
 <div id="sidebar">
   <%= yield :sidebar %>
 </div>
</body>

In one of your view:

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

<% content_for :html_head do %>
  <script type="text/javascript">
    console.log("Hello World!");
  </script>
<% end %>

This will produce the following HTML:

<html>
<head>
  <script type="text/javascript">
    console.log("Hello World!");
  </script>
</head>
<body>
 <div id="sidebar">
   This content will show up in the sidebar section
 </div>
</body>

Posts that might help:

Links to documentation & guides:

Leave a Comment