Desenvolvimento Web Hipertexto • Texto em formato digital • Acesso por meio de hiperlinks – Interconecta conjunto de informação • Sistema baseado em Hipertexto mais conhecido World Wide Web Cliente-Servidor • Clientes – Enviam requisições para servidores e aguarda por resposta • Servidores – Oferecem algum serviço, processam a requisição e retornam o resultado HTTP • HyperText Transfer Protocol – Protocolo responsável pelo tratamento de pedidos e respostas entre cliente e servidor na WWW – Dados são codificados e encapsulados no corpo da mensagem e enviados ao servidor • Text/plain, text/gif, text/jpeg, etc.. – Métodos • GET • POST (Exemplo) MVC • Princípio que divide/estrutura a aplicação em três entidades distintas que interagem entre si • Separação: – Dados e Lógica de negócio (Model) – Layout / Visualização(View) – Controller • Intermedia Model e View MVC • Model – Representa as entidades do domínio da aplicação • View – Interface de usuário – Visualização dos dados • Controller – Processa eventos disparados pelos usuários – Recebe requisição do usuário MVC MVC Rails O que é? • Meta-Framework/Framework cujo foco é desenvolvimento de aplicações web • Estrutura base das aplicações segue MVC • Linguagem utilizada Ruby Objetivo • Introdução Rails • Desenvolver ao longo da aula o exemplo que promete construir um blog em 15 minutos Requisitos Aplicação • Dono do blog – cria post – lê, modifica, apaga posts – lê, apaga comentários de outros usuários • Usuário – lê posts de um blog – cria comentário para um post – lê comentários, apaga seus próprios comentários Iniciando • % rails blog – Comando rails gera esqueleto da aplicação • Estrutura da aplicação – app: componentes (controllers/views/model) – config: database.yml – public: arquivos css, javascript, imagens, uploads • Levantando a aplicação (localhost:3000) – % script/server Criando Primeira Tabela • % script/generate model post – generate: script para gerar estrutura – model: indica tipo da estrutura – post: nome do objeto • Pasta db/migrate: – self.up => fazer alterações – sef.down => desfazer alteração Criando Primeira Tabela • self.up create_table :posts do |t| t.string :title t.string:body t.timestamps end • self.down drop_table : posts Criando Primeira Tabela • % rake db:migrate • rake: similar ao MakeFile • Aplica a migração no banco de dados Criando Primeira Tabela • script/console – Post.create(:title=>’teste’, :body=>’teste’) – Post.find(:all) – P = Post.find(1) • P.destroy Criando Primeiro Controller • % script/generate controller posts • Testando: – localhost:3000/posts • Em app\controllers\posts_controller.rb def index end • Tentando novamente Criando Primeiro Controller • app\views\posts\index.rhtml <h1>Listando Posts</h1> <table> <tr> <th>Titulo</th> <th>Conteudo</th> </tr> </table> • Tentando novamente Criando Primeiro Controller • Listando Posts def index @posts = Post.find(:all) End • Na view index.rhtml – Iterando <% @posts.each do |p| %> <tr><td><%=p.title%></td> <td><%=p.body%></td> </tr> <% end %></table> Criando Posts • Adicionando links <p> <%= link_to “Nova Postagem", :action => “new” %> </p> • Clicando no link …. • Deve-se registrar action new, assim como new.rhtml Criando Posts • Criando o formulário: <% form_tag :action => 'create' do%> Titulo: <%= text_field :post,:title%><br /> Mensagem: <%= text_field :post, :body%><br /> <%= submit_tag 'Criar'%> <% end %> <%= link_to 'Voltar', :action => ‘index’ %> Criando Posts • Criando create: def create post = Post.new post.attributes = params[:post] post.save redirect_to :action => 'index' end Editando Posts • Inserindo link para editar: <td><%= link_to "Editar", :action => "edit", :id => p.id %></td> • Inserindo action edit: @post = Post.find(params[:id]) Editando Posts • Criando View de edição: <% form_tag :id => @post, :action => 'update' do%> Titulo: <%= text_field :post,:title%><br /> Mensagem: <%= text_field :post,:body%><br /> <%= submit_tag 'Salvar'%> <% end %> Editando Posts • Definindo action update: def update @post = Post.find(params[:id]) @post.attributes = params[:post] @post.save redirect_to :action => 'index' end Situação atual • Temos um blog com funcionalidades de listar, inserir e editar um post. • Pode-se ver o quão produtivo é se trabalhar com Rails Exercício • Implementar os requisitos que não foram finalizados – Slides 12 • Atividade em Dupla • Sem uso de scaffold • Pesquisar sobre registrar o usuário logado na sessão, relacionamentos entre entidades no Rails • Utilizar Sqlite3 • Reflita sobre as entidades e relacionamentos entre elas Referências • Tutorial: “Rails para sua diversão e lucro” • http://api.rubyonrails.org/classes/ActionView/ Helpers/FormTagHelper.html • Vídeo de Terceiro sobre Rails - Lab. Eng. Software • http://app.dcc.ufba.br/~terceiro/matb14/ Equipes • • • • • • • • • • Leandro e Ivan Roberto e Jandson Paulo e Paulo Lorena e Manuel Leonardo e Matheus Caíque e Ademilson Adnilson e Fabrício Ítalo e Arleson Fagner e Naíla Felipe e Joás