Primeirona

Primeirona

Table of Contents

1 Primeirona

Serviço de apelidos, cadastramento de nomes e apelidos, com possibilidade de edição e pesquisa.

  1. Criar a aplicação
    rails new primeirona [-d prostgresql]
    
  2. Ajustar o Gemfile

    Algumas gemas que aparecem lá sem mais documentação

    mini_racer
    motor para javascript
    redis
    armazenamento em memória
    mini_magick
    para imagens (usa imagemagick)
    capistrano
    serviços em paralelo com vários hosts

    Pode-se comentar o tzinfo-data no linux

    A versão 1.4 do sqlite apresenta conflito com Rails, force o uso de uma versão mais anitga (1.3):

    gem 'sqlite3', '~> 1.3.6'
    

    Troque chromedriver-helper por webdrivers

    # gem 'chromedriver-helper'
    gem 'webdrivers'
    

    Normalmente o Rails usa erb, mas é mais legal o haml

    gem 'haml'
    gem 'haml-rails', :group => 'development'
    

    Finalmente execute

    bundle install
    rails g haml:application_layout convert
    

    Seguir as instruções

  3. Criar o banco
    rake db:create
    
  4. Abrir um servidor de testes
    bin/rails server
    

    Note a versão específica do rails em bin

  5. Criar controladores
    bin/rails g controller Manda index
    

    O código em app/controller/manda_controller.rb será responsável por tratar rotas com manda/, em particular

    get 'manda/index'
    

    Para ver as rotas, use bin/rails routes

  6. Criar visões

    Uma visão já aparece em app/views/manda/index.html.haml

    As rotas ficam em config/routes.rb (é Ruby!). A visão para o controlador Manda já está lá, coloque mais uma para a raiz da aplicação

    Rails.application.routes.draw do
      get  'manda/index'
      root 'manda#index'
    end
    

    Para root a linha significa executar o método index da classe manda, veja o controlador

  7. Estendendo para apelidos

    Basta gerar o controlador. Mas desta vez podemos usar metaprogramação para gerar tudo de uma vez:

    bin/rails g controller Apelidos
    

    Os nomes são importantes (convenção sobre configuração). Apelidos está associado com o controlador ApelidosController e com elementos apelido, no singular.

    Para incluir as rotas, mexemos mais uma vez em config/routes.rb

    Rails.application.routes.draw do
      get  'manda/index'
      resources :apelidos
      root 'manda#index'
    end
    

    Agora precisamos dos métodos necessários no controlador, citados nas rotas

    index create new edit show update destroy
    

    e preparar as visões correspondentes. Devem corresponder às rotas, já que elas descrevem as requisições.

    Para testes, façamos um método create bem simples

    def create
       render plain: params[:apelido].inspect
    end
    

    E uma visão para permitir a entrada de dados em view/apelidos/new.html.haml

    %h1 Novo apelido
    = form_with scope: :apelido, url: apelidos_path, local: true  do |f|
      = f.label :nome
      = f.text_field :nome
      = f.label :apelido
      = f.text_field :apelido
      = f.submit
    

    Veja e envie alguma coisa

    localhost:3000/apelidos/new
    
  8. Criar modelos

    Montamos rotas e visões, mas nada é guardado em banco. O banco usará o modelo Apelido e terá dois campos nome e apelido

    bin/rails g model Apelido nome:string apelido:string
    

    Isso cria o modelo e testes, mas não coloca no banco. A configuração do banco é feita com uma migração. Veja os arquivos gerados. Não usaremos estes testes.

    Para atualizar o banco, precisamos fazer a migração

    bin/rails db:migrate
    
  9. Acertar visões e controladores

    Com o formulário conseguimos receber dados, agora é necessário acertar o controlador para salvá-los

    def create
      @apelido = Apelido.new(
                   params.require(:apelido).permit(:nome, :apelido))
      # salva
      @apelido.save
      # mostra
      redirect_to @apelido
    end
    

    E naturalmente mostrar uma confirmação (show.html.haml), veja o redirect no final.

    %h1 Pronto!
    %p
      %i= @apelido.nome
      já pode ser chamado de
      %i= @apelido.apelido
    

    Para que o show.html.haml funcione, @apelido precisa estar definido. Isso é feito no controlador, no método show

    def show
        @apelido = Apelido.find(params[:id])
    end
    

    Já o index precisa pegar todos os apelidos salvos

    def index
        @apelidos = Apelido.all
    end
    

    e mostrar (index.html.haml).

    %h1 Apelidos cadastrados
    - @apelidos.each do |ap|
       %p = "#{ap.nome} é #{ap.apelido}"
    

Author: Marco Dimas Gubitoso

Created: 2020-03-18 qua 13:19

Emacs 25.2.2 (Org mode 8.2.10)

Validate

Modifié le: mercredi 18 mars 2020, 13:35