Durante o desenvolvimento em Rails, diversas vezes precisamos mudar o título da página ou colocar um JavaScript no final de tudo. Para tornar esse tipo de ação mais rápida e prática o Rails criou o content_for
.
Imagine que temos um lay-out:
# app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Um App Rails</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
<%= yield %>
</body>
</html>
Se quisermos customizar o título, dependendo da página que estamos podemos usar o yield
passando um symbol:
# app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title><%= yield :title %></title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
<%= yield %>
</body>
</html>
Agora podemos usar o content_for
para entrar no lugar do yield
:
# uma outra view qualquer
<% content_for :title { 'Titulo da página' } %>
Pronto! Você pode mudar o título de cada página. Com o content_for
também é possível abrir um bloco caso queira colocar mais HTML ou JavaScript. Você também pode dar uma olhada no content_for?
para verificar a existência e, caso não exista, utilizar um valor padrão.