{"id":833,"date":"2010-03-19T09:16:16","date_gmt":"2010-03-19T12:16:16","guid":{"rendered":"http:\/\/blog.plataformatec.com.br\/?p=833"},"modified":"2010-04-22T14:55:56","modified_gmt":"2010-04-22T17:55:56","slug":"mostre-seus-models-baby","status":"publish","type":"post","link":"https:\/\/blog.plataformatec.com.br\/2010\/03\/mostre-seus-models-baby\/","title":{"rendered":"Mostre seus models baby!"},"content":{"rendered":"

Ultimamente temos trabalhado em alguns projetos que necessitaram de v\u00e1rios CRUDs na administra\u00e7\u00e3o como p\u00e1ginas mostrando listas de atributos. E com passar do tempo, est\u00e1vamos ficando entediados de tanto copiar e colar c\u00f3digo como este para cada atributo em nossas p\u00e1ginas:<\/p>\n

\r\n

\r\n Name<\/strong>
\r\n <%= @person.name %>\r\n<\/p>\r\n<\/pre>\n

N\u00f3s j\u00e1 tinhamos criado um helper para fazer o trabalho para n\u00f3s, mas copiar este helper de um projeto para outro n\u00e3o \u00e9 DRY. Ent\u00e3o decidimos criar uma nova gem, chamada ShowFor<\/a>.<\/p>\n

ShowFor<\/a> \u00e9 uma DSL para auxili\u00e1-lo a mostrar uma lista de atributos, usando I18n, perfeito para p\u00e1ginas de visualiza\u00e7\u00e3o em interfaces CRUDs. Ele permite que voc\u00ea substitua duplica\u00e7\u00e3o de c\u00f3digo\/html em suas views usando uma sintaxe mais atraente. Vejamos o que podemos fazer!<\/p>\n

Atributos<\/h3>\n

Vamos imaginar que temos um model Person, que possui os atributos first_name, last_name, age, photo, e confirmed. As linhas abaixo criam uma lista de valores para um registro espec\u00edfico:<\/p>\n

\r\n<% show_for @person do |p| %>\r\n  <%= p.attribute :first_name %>\r\n  <%= p.attribute :last_name %>\r\n  <%= p.attribute :confirmed? %>\r\n  <%= p.attribute :created_at, :format => :short %>\r\n  <%= p.attribute :age, :if_blank => \"No age\" %>\r\n\r\n  <% p.attribute :photo do %>\r\n    <%= image_tag(@person.photo_url) %>\r\n  <% end %>\r\n<% end %>\r\n<\/pre>\n

E este \u00e9 o c\u00f3digo HTML que voc\u00ea tem como resultado:<\/p>\n

\r\n
\r\n

First name<\/strong>
Carlos<\/p>\r\n

Last name<\/strong>
Antonio<\/p>\r\n

Confirmed?<\/strong>
Yes<\/p>\r\n

Created at<\/strong>
08 Mar 11:30<\/p>\r\n

Age<\/strong>
24<\/p>\r\n

Photo<\/strong>
\r\n \"Rails\"\r\n <\/p>\r\n<\/div>\r\n<\/pre>\n

Como se pode ver, voc\u00ea ter\u00e1 uma marca\u00e7\u00e3o HTML padr\u00e3o, com classes e ids para ajud\u00e1-lo no design com CSS. E caso tenha notado, estamos usando op\u00e7\u00f5es extras em alguns atributos, vamos dar uma olhada em algumas delas:<\/p>\n