Criação do primeiro app passo a passo
Primeirona
Table of Contents
1 Primeirona
Serviço de apelidos, cadastramento de nomes e apelidos, com possibilidade de edição e pesquisa.
- Criar a aplicação
rails new primeirona [-d prostgresql]
- 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 linuxA 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
porwebdrivers
# gem 'chromedriver-helper' gem 'webdrivers'
Normalmente o Rails usa
erb
, mas é mais legal ohaml
gem 'haml' gem 'haml-rails', :group => 'development'
Finalmente execute
bundle install rails g haml:application_layout convert
Seguir as instruções
-
- Criar o banco
rake db:create
- Abrir um servidor de testes
bin/rails server
Note a versão específica do
rails
embin
- Criar controladores
bin/rails g controller Manda index
O código em
app/controller/manda_controller.rb
será responsável por tratar rotas commanda/
, em particularget 'manda/index'
Para ver as rotas, use
bin/rails routes
- 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 controladorManda
já está lá, coloque mais uma para a raiz da aplicaçãoRails.application.routes.draw do get 'manda/index' root 'manda#index' end
Para
root
a linha significa executar o métodoindex
da classemanda
, veja o controlador - 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 controladorApelidosController
e com elementosapelido
, 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 simplesdef 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
- Criar modelos
Montamos rotas e visões, mas nada é guardado em banco. O banco usará o modelo
Apelido
e terá dois camposnome
eapelido
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
- 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 oredirect
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étodoshow
def show @apelido = Apelido.find(params[:id]) end
Já o
index
precisa pegar todos os apelidos salvosdef index @apelidos = Apelido.all end
e mostrar (
index.html.haml
).%h1 Apelidos cadastrados - @apelidos.each do |ap| %p = "#{ap.nome} é #{ap.apelido}"