IN ('São Paulo', 'Rio de Janeiro')
Além disso, modelos ActiveRecord possuem outra característica importante.
Eles possuem ferramentas para validação de atributos, callbacks em momentos opor-
tunos (como antes de atualização ou criação), tradução e outros. Este componente é
o ActiveModel.
Mas os modelos não necessariamente precisam ser objetos ActiveRecord. É bas-
tante comum separarmos regras complexas em diversas classes em Ruby puro. Isso
é importante para evitar que os modelos ou controles fiquem grandes e complexos.
Vamos ver um exemplo disso no capítulo 10 Login do usuário.
No caso do Colcho.net, o Quarto se encaixa perfeitamente como um modelo.
Assim, podemos criar validações como a presença de uma localidade ou calcular a
disponibilidade dele em uma certa data.
77
3.6. Controle
Casa do Código
3.6
Controle
A camada de controle é o intermédio entre os dados que vem dos usuários do site
e os Modelos. Outro principal papel da camada de controle é gerenciar sessão e
cookies de usuário, de forma que um usuário não precise enviar suas credenciais a
todo momento que fizer uma requisição.
Após obter os dados na camada de modelos, é papel da camada de Controle
determinar a melhor maneira de representar os dados, seja via a renderização de
uma página HTML ou na composição de um objeto JSON.
No Ruby on Rails, os componentes que trabalham nessa camada são o
ActionDispatch e o ActionController, ambos parte do pacote denominado
ActionPack. O ActionDispatch trabalha no nível do protocolo HTTP, fazendo o
parsing dos cabeçalhos, determinando tipos MIME, sessão, cookies e outras ativida-
des.
Já o ActionController dá ao desenvolvedor o suporte para escrever o seu código
de tratamento das requisições, invocando os modelos e as regras de negócio adequa-
das. Ele também dá suporte a filtros, para, por exemplo, verificar se um usuário está
logado no sistema para fazer uma reserva no site.
Vamos trabalhar bastante com esses componentes no decorrer do livro e apren-
der como eles funcionam e como podemos implementá-los.
3.7
Apresentação
A camada de apresentação é onde prepara-se a resposta para o usuário, depois da
execução das regras de negócio, consultas no banco de dados ou qualquer outra ta-
refa que sua aplicação deva realizar.
As maneiras mais comuns de se exibir dados atualmente na web é através de pági-
nas HTML. No Ruby on Rails, conseguimos construí-las com o auxílio da biblioteca
ActionView (também membro do ActionPack). Também é possível ter a represen-
tação JSON dos dados, via a serialização de objetos (transformação de objetos Ruby
puro em JSON) ou via a construção de templates com o JBuilder, por exemplo.
Depois que a apresentação final
é montada, ela é entregue ao usuário via um
servidor web, como por exemplo, uma bela página mostrando todas as informações
de um quarto, ou um objeto JSON que vai ser lido pelo JavaScript de uma outra
página.
Por fim, o Rails ainda possui uma estrutura complexa para gerenciar imagens,
78
Casa do Código
Capítulo 3. Conhecendo a aplicação
stylesheets e javascripts, chamada Asset Pipeline, pré-processando os arquivos e
preparando-os para entregar da melhor forma para o usuário.
3.8
Rotas
Como o Ruby on Rails sabe qual Controle deve ser invocada para as requisições?
Para resolver essa questão, é preciso indicar que uma determinada URL, quando
invocada, dispara um Controle. O papel desse mapeamento é das Rotas, que são
voltadas para recursos, como vimos no início deste capítulo. Mas é possível fazer
outras diversas maneiras de rotas com a complexidade que desejar.
Veja a figura 3.1. Nela é possível ver a interação entre as diversas camadas MVC
e o roteador quando o usuário requisita uma página de edição do recurso quarto":
Figura 3.1: Fluxo do MVC
79
3.9. Suporte
Casa do Código
3.9
Suporte
Em volta de todo os componentes que mencionamos antes, existe também
ActionSupport. É nele que ficam diversas ferramentas e extensões ao Ruby, para
deixá-lo ainda mais fácil de usar. Graças a ele é que podemos fazer a seguinte linha
de comando:
2.days.ago
# => Sun, 03 Jun 2012 01:08:33 BRT -03:00
Essa linha de código imprime a data de dois dias atrás.
Existem várias funcionalidades dentro do ActionSupport, mas não vale a pena
entrar em detalhe. Vamos usá-lo diversas e você acabará aprendendo esses truques
e recursos durante o livro.
3.10
Considerações finais
Não se preocupe em decorar todos os nomes que foram vistos nesse capítulo. Você
pode consultar o livro sempre que precisar saber. É importante porém saber que eles
existem para que você possa procurar ajuda ou documentação.
Aliás, falando em documentação, você aprenderá com o decorrer do livro que
a API do Rails é bem extensa e cheia de métodos. Ambiente-se a desenvolver com
o site da documentação oficial do Rails aberta. Ela está disponível em http://api.
rubyonrails.org/. Sempre que tiver alguma dúvida sobre algum método do Rails,
você pode procurar que estará lá.
O que é extremamente importante entender desse capítulo, porém, são as ideias