Melhoria de templates e CSS . . . . . . . . . . . . . . . . . . . . . . . . 142
7.5
Trabalhe com layout e templates para melhorar sua apresentação . . . 145
iv
Casa do Código
Sumário
7.6
O que é o Asset Pipeline? . . . . . . . . . . . . . . . . . . . . . . . . . . 148
7.7
Criando os novos stylesheets . . . . . . . . . . . . . . . . . . . . . . . . 150
7.8
Feedback em erros de formulário . . . . . . . . . . . . . . . . . . . . . 156
7.9
Duplicação de lógica na apresentação nunca mais. Use os Helpers . . 157
8
Faça sua aplicação falar várias línguas
161
8.1
O processo de internacionalização (I18n) . . . . . . . . . . . . . . . . . 161
8.2
Traduza os templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
8.3
Extra: alterar o idioma do site . . . . . . . . . . . . . . . . . . . . . . . 170
9
O cadastro do usuário e a confirmação da identidade
177
9.1
Entenda o ActionMailer e use o MailCatcher . . . . . . . . . . . . . . 177
9.2
Templates de email, eu preciso deles? . . . . . . . . . . . . . . . . . . . 179
9.3
Mais emails e a confirmação da conta de usuário . . . . . . . . . . . . 183
9.4
Um pouquinho de callbacks para realizar tarefas pontuais . . . . . . . 184
9.5
Roteamento com restrições . . . . . . . . . . . . . . . . . . . . . . . . . 187
9.6
Métodos espertos e os finders dinâmicos . . . . . . . . . . . . . . . . . 188
9.7
Em resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
10 Login do usuário
193
10.1
Trabalhe com a sessão . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
10.2 Controles e rotas para o novo recurso . . . . . . . . . . . . . . . . . . . 196
10.3 Sessões e cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
10.4 Consultas no banco de dados
. . . . . . . . . . . . . . . . . . . . . . . 206
10.5 Escopo de usuário confirmado . . . . . . . . . . . . . . . . . . . . . . . 214
11 Controle de acesso
217
11.1
Helpers de sessão
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
11.2
Não permita edição do perfil alheio . . . . . . . . . . . . . . . . . . . . 224
11.3
Relacionando seus objetos . . . . . . . . . . . . . . . . . . . . . . . . . 227
11.4
Relacione quartos a usuários . . . . . . . . . . . . . . . . . . . . . . . . 229
11.5
Limite o acesso usando relacionamentos . . . . . . . . . . . . . . . . . 234
11.6
Exibição e listagem de quartos . . . . . . . . . . . . . . . . . . . . . . . 238
v
Sumário
Casa do Código
12 Avaliação de quartos, relacionamentos muitos para muitos e organização
do código
245
12.1
Relacionamentos muitos-para-muitos . . . . . . . . . . . . . . . . . . 247
12.2 Removendo objetos sem deixar rastros . . . . . . . . . . . . . . . . . . 253
12.3
Criando avaliações com pitadas de AJAX . . . . . . . . . . . . . . . . . 254
12.4 Diga adeus a regras complexas de apresentação: use presenters . . . . 263
12.5
jQuery e Rails: fazer requisições AJAX ficou muito fácil . . . . . . . . 267
12.6 Média de avaliações usando agregações . . . . . . . . . . . . . . . . . . 269
12.7 Aplicações modernas usam fontes modernas . . . . . . . . . . . . . . 274
12.8 Eu vejo estrelas - usando CSS e JavaScript para melhorar as avaliações 278
12.9 Encerrando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
13 Polindo o Colcho.net
287
13.1
Faça buscas textuais apenas com o Rails . . . . . . . . . . . . . . . . . 287
13.2
URLs mais amigáveis através de slugs . . . . . . . . . . . . . . . . . . . 292
13.3
Paginação de dados de forma descomplicada . . . . . . . . . . . . . . 295
13.4 Upload de fotos de forma simples . . . . . . . . . . . . . . . . . . . . . 299
13.5
Coloque a aplicação no ar com o Heroku . . . . . . . . . . . . . . . . . 303
14 Próximos passos
309
Índice Remissivo
315
Bibliografia
315
vi
Capítulo 1
Introdução
Quem, de três milênios, / Não é capaz de se dar conta / Vive na ignorância, na
sombra, / À mercê dos dias, do tempo.
Goethe
Se você desenvolve para a Web, provavelmente já ouviu falar sobre Ruby on
Rails. O Ruby on Rails (ou também apenas Rails) é um framework open-source
para desenvolvimento de aplicações web, criado por David Heinemeier Hansson (ou
DHH). O framework, escrito na linguagem Ruby, foi extraído de um produto de
sua empresa, o Basecamp® (http://basecamp.com) em 2003.
Desde então ele ficou muito famoso, levando também a linguagem Ruby, ante-
riormente apenas conhecida no Japão e em poucos lugares dos Estados Unidos, ao
mundo todo. Mas por que cresceu tanto? O que a linguagem e o framework trouxe-
ram de novo para sair do anonimato e praticamente dominar o mercado de startups
nos Estados Unidos e no mundo?
Vamos primeiro à linguagem Ruby. A linguagem Ruby foi criada pelo extrema-
mente talentoso programador Yukihiro Matz Matsumoto. O objetivo dele ao criar
1.1. Para quem é este livro
Casa do Código
o Ruby em 1995 foi a felicidade e o prazer de quem programa, ao invés de perfor-
mance ou algum outro aspecto técnico. Ele usou Perl como inspiração, com várias