Reputation:
I have read it from the Rails guides, Have looked at Micheal Hartel book and now reading it from Rails View book but still I get confused :(
There is a _footer.html.erb
file so it is a "partial" and in the code it has written:
<%=render 'layouts/footer' %>
so my understanding is that when it sees this, goes and insert the HTML for footer file in here. Ok... Now a few pages later it is saying:
<%= render partial: 'activitiy_items/recent' %>
so WHY this time we have the word "partial" in here but we didn't have it in the previous one?
And there somewhere else I see <%= yield :sidebar %>
So this yield
also insert HTML in its place? Well wasn't it what render
was doing?
I was hoping if another programmer instead of books explains this to me maybe I get it this time:)
Upvotes: 70
Views: 27725
Reputation: 54882
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.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:
Upvotes: 136
Reputation: 368
render :template and render :partial are two files in rails..
render :template are mostly created according to an action with syntax demo.html.erb
render :partial are reuseable and called from different views , are shared among many pages in application and syntax is _demo.html.erb
yield and render..
Yield is a way to call a block of code with its output but render will include a partial page template where it is called. In rails yield is mostly used in layout whereas render is used in actions or their templates
Upvotes: 4