Rails Girl – Rails for Newbies

Ruby on Rails for Newbies

Partials, reutilização de código no Rails agosto 5, 2008

Filed under: Ruby on Rails — amandavarella @ 8:10 pm
Tags: ,

Partials são pedaços de página que podem ser reutilizados pra evitar replicação de código. Pra quem vem do mundo Java, as Partials fazem algo semelhante ao Tiles, vc vai juntando os “pedaços” conforme a sua necessidade. Então vai um simples, mas muito útil exemplo de Partials em Rails.

Vou utilizar o exemplo que eu tenho aqui, onde eu fiz o scaffold* para o modelo “reading”.
Na view index.html.erb foi gerado o seguinte trecho de código:

 
#index.html.erb

<% for reading in @readings %>
<tr>
<td><%=h reading.url %></td>
<td><%=h reading.text %></td>
<td><%=h reading.page %></td>
<td><%=h reading.time %></td>
<td><%= link_to ‘Show’, reading %></td>
<td><%= link_to ‘Edit’, edit_reading_path(reading) %></td>
<td><%= link_to ‘Destroy’, reading, :confirm => ‘Are you sure?’, :method => :delete %></td>
</tr>
<% end %>

Eu gostaria de reutilizar o trecho que está exibindo cada “reading”, então, eu vou retirar e colocar este trecho de código em uma Partial, assim eu posso chamá-la em qualquer outro lugar da minha aplicação, onde eu queira exibir as informações da mesma maneira.

Uma partial é um arquivo que começa com um “_”, underscore, underline…. então vou criar um arquivo _reading.html.erb (dentro da pasta de views de readings), e vou pegar todo o código que estava dentro do meu for. Este será o conteúdo da partial:
#_reading.html.erb

<tr>
<td><%=h reading.url %></td>
<td><%=h reading.text %></td>
<td><%=h reading.page %></td>
<td><%=h reading.time %></td>
<td><%= link_to ‘Show’, reading %></td>
<td><%= link_to ‘Edit’, edit_reading_path(reading) %></td>
<td><%= link_to ‘Destroy’, reading, :confirm => ‘Are you sure?’, :method => :delete %></td>
</tr>

E finalmente vou alterar o meu index.html.erb, substituindo:

#index.html.erb



<tr>
<td><%=h reading.url %></td>
<td><%=h reading.text %></td>
<td><%=h reading.page %></td>
<td><%=h reading.time %></td>
<td><%= link_to ‘Show’, reading %></td>
<td><%= link_to ‘Edit’, edit_reading_path(reading) %></td>
<td><%= link_to ‘Destroy’, reading, :confirm => ‘Are you sure?’, :method => :delete %></td>
</tr>

Por uma única linha:

#index.html.erb

<%= render :partial => 'reading', :collection => @readings%>

A partial receberá a collection “readings” como parâmetro.

Simples, bonito, e limpo!

Newbies Corner:
Scaffold é uma operação do Rails onde vc passa um nome de modelo e os campos, e ele gera uma aplicação CRUD (Create, Retrieve, Update e Delete) completa.
Ex: o comando “script/generate scaffold person name:string tel:number” vai gerar um cadastro completo de pessoas com nome e telefone, permitindo listar, excluir e alterar cada registro.