1 / 71

Entendendo Rails

Entendendo Rails. Fabio Akita Surgeworks Brazil Rails Practice Manager www.akitaonrails.com. 37signals. Criado por David Heinemeier Hansson, em 2004 Extraído do aplicativo Basecamp Feito em Ruby, em vez de PHP ou Java Lançamento da versão 1.0 em dez/2005. O que é Rails?.

xanto
Download Presentation

Entendendo Rails

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Entendendo Rails Fabio Akita Surgeworks Brazil Rails Practice Manager www.akitaonrails.com

  2. 37signals • Criado por David Heinemeier Hansson, em 2004 • Extraído do aplicativo Basecamp • Feito em Ruby, em vez de PHP ou Java • Lançamento da versão 1.0 em dez/2005

  3. O que é Rails? • “full stack web framework” • Framework completo para desenvolvimento de aplicativo Web • Pacote MVC (Model-View-Controller) • Action Pack (Action Controller e Action View) • Active Record • Suporte a envio e recebimento de e-mails • Action Mailer • Suporte a Web Services • Action WebServices

  4. Arquitetura Rails

  5. Por que Ruby? • Linguagem Dinâmica • Fortemente Tipada • Muito Expressiva • Altamente Produtiva • Totalmente Orientado a Objetos • Herança de SmallTalk e Lisp • Simples sem ser complexa • Sintaxe familiar e coerente • Permite criação de Linguagem Específica de Domínio (DSL)

  6. Começo Simples • Windows: Instant Rails • wiki.rubyonrails.com/rails/pages/InstantRails • Mac e Linux: • FiveRuns RB-Install • www.fiveruns.com/products/rm/install

  7. Começo Padrão • Instalar Ruby 1.8.6 • www.ruby-lang.org/en/downloads • Instalar RubyGems (Mac ou Linux) • rubyforge.org/frs/?group_id=126 • Instalar Rails (linha de comando) • gem install rails • Instalar MySQL (suporta outros bancos) • dev.mysql.com/downloads

  8. Primeiro Passo • Saber o que queremos: • David Hansson tem um screencast demonstrando a criação de um pequeno blog em 15 minutos • http://media.rubyonrails.org/video/rails_take2_with_sound.mov • Queremos um blog semelhante

  9. O Que temos no Blog? • Uma tabela de Posts • Uma tabela associada de Comments • Uma tela de listagem de Posts • Uma tela de criação e edição de Posts • Uma tela de detalhes do Post • No detalhe do Post vemos e adicionamos Comments • Faremos tudo em inglês. Não é difícil adaptar para Português, mas não é escopo desta demonstração

  10. Novo Projeto • rails <projeto>

  11. Novo Banco de Dados • create database <projeto>_<ambiente>

  12. Ambientes • Rails vem preparado para lidar com três ambientes diferentes: • Development (sandbox) • Test (testes unitários, funcionais, integrados) • Production (produção)

  13. Convenção sobre Configuração • Estrutura comum de diretórios

  14. Configuração Mínima • Banco de dados • No exemplo, apenas colocando as senhas

  15. Criando um Controller • script/generate controller <nome>

  16. Controllers e Actions • Todo Controller fica no diretório: • /app/controllers/<nome>_controller.rb • Todo Controller herda a classe ApplicationController • Todo aplicativo Rails é criado com uma classe chamada ApplicationController, que herda de ActionController::Base, e é base de todos os outros controllers • Todo método de um controller é chamado de Action

  17. Criando uma Action • Uma classe Controller pode ter quantas Actions quanto necessárias

  18. Servidor de Teste: WEBRick

  19. Roteamento Customizável • http://localhost:3000/:controller/:action/:id

  20. Acessando uma Action • Seguindo a regra anterior de roteamento • http://localhost:3000/blog/index • blog = app/controller/blog_controller.rb • index = método index em BlogController

  21. Criando uma View

  22. Mais Convenções • Ao final de toda Action, Rails chamará uma view com o mesmo nome da Action, no seguinte diretório: • /app/views/<controller>/<action>.<ext> • A extensão do arquivo pode ser: • .rhtml - Embedded Ruby (HTML+Ruby) • .rxml - XML Builder (Ruby puro) • .rjs - Javascript Generator (Ruby puro) • Este fluxo pode ser interrompido com uma chamada explícita ao método render ou redirect_to

  23. Implementando Post • script/generate model <nome>

  24. Migration • Manutenção de tabelas usando Ruby • Independente de banco • Mas também suporta SQL nativo

  25. Rake: Ruby Make • Execução de tarefas, implementadas em Ruby • Primeira tarefa: manutenção das tabelas

  26. rake migrate • Toda entidade criada com script/generate gera um arquivo de Migration no diretório db/migrate • Todo arquivo Migration é numerado: • 001_create_posts.rb • O comando rake migrate executa os arquivos em db/migrate • Usa a tabela schema_info no banco de dados para saber a partir de qual numeração começar • O gerenciamento do banco de dados é feito totalmente em Ruby

  27. Mapeando Tabelas • A classe Post já é capaz de gerenciar os dados da tabela no banco de dados • Não há necessidade de explicitar o mapeamento das colunas do banco com atributos da classe • Rails não proíbe nada: se for necessário existe como mapear uma coluna para outro atributo de nome diferente

  28. Convenções de Entidades • Toda entidade é criada no diretório padrão: • /app/models/<controller>/<model>.rb • Toda entidade herda diretamente da classe ActiveRecord::Base • Não há necessidade de mapear manualmente cada coluna da tabela • Convenção: a classe tem o nome no singular (Post), a tabela tem o nome do plural (posts) • Convenção: Surrogate Key, toda tabela tem uma chave primária chamada “id” que é um número auto-incrementável

  29. annotate_models

  30. annotate_models • Plugin de Dave Thomas • Instalação (via internet): • script/plugin install annotate_models • Utilização (via rake): • rake annotate_models • Lê a tabela do banco de dados e coloca um cabeçalho como comentário na classe entidade

  31. Scaffold

  32. Scaffold • Colocar o método scaffold :<model> no controller é suficiente • Telas CRUD (Create, Read, Update, Delete) geradas automaticamente em tempo de execução (runtime) • CUIDADO: Rails NÃO é Scaffold • Scaffold é apenas uma pequena funcionalidade para facilitar prototipação

  33. Configurando Post • Acrescentando validação

  34. Testando modificação • Não é necessário reiniciar servidor

  35. Incrementando Post • Criando novas colunas com Migration • script/generate migration <atividade>

  36. Executando Migration

  37. Criando um Post • Novamente, sem reiniciar o servidor

  38. Gerando o Scaffold • script/generate scaffold <model> <controller>

  39. Arquivos Gerados • Toda execução automática de antes agora está exposta em arquivos que podemos editar como quisermos • Provado: Rails não se restringe a Scaffold automático

  40. Modificando a Listagem • /app/views/blog/list.rhtml

  41. Testando a listagem • http://localhost:3000/blog • Portanto, podemos alterar o layout ou qualquer código como quisermos

  42. Polêmica do Scriplet • Rails não utiliza taglibs • Ruby é simples e expressiva o suficiente para não precisar de artifícios • Taglibs são simplificações de lógica • Podemos fazer tudo de maneira simples e flexível sem precisar aprender sintaxes complexas de XML

  43. Exemplos Taglibs <logic:iterate id=”post" collection="<%=posts%>"> Faz alguma coisa com post </logic:iterate> <logic:equal parameter="number" value="7"> Está correto! </logic:equal> Scriptlets <% @posts.each do |post| %> Faz alguma coisa com post <% end %> <% if number == "7" %> Está correto! <% end %> Portanto, é a mesma coisa !

  44. Criar Comment • Hora de criar a entidade Comment • Lembrete: esta entidade será associada a um Post

  45. Rake outra vez • Obs: Comment pertence a Post através da coluna post_id. • Convenção de Chave Estrangeira: <classe>_id

  46. Associações

  47. Usando associações • Criando formulário de Comment na tela de detalhe de um Post • /app/views/blog/show.rhtml

  48. Partials • “Don’t Repeat Yourself” (DRY) • Uma das maneiras de separar trechos de código • Toda partial começa com underline “_” • <%= render :partial => "comment", :collection => @post.comments %> • Associação has_many em Post automaticamente fornece um hash chamado comments (nome da outra entidade no plural)

  49. Action para Comment • <% form_for :comment, @comment, :url => {:action => 'add_comment', :id => @post } do |f| %> • Action esperada: add_comment • Passando parâmetros: params[:id] e params[:comment] • Hash params[:comment] contém todos os campos do formulário enviado.

  50. Resultado Final • Tela de Post com a lista de Comments

More Related