Nesta aula iremos aprender um pouco sobre os generators do Rails, utilizaremos o, scaffold, models e controllers.
Nesta aula falaremos sobre:
Após a configuração inicial que vimos na aula anterior, vamos ver como criar os generators.
Quando criamos um Model, criamos um objeto que terá conexão direta com nossa base de dados.
Para gerar um model por exemplo:
rails g model Carro nome:string marca:string
O rails g
é uma abreviação para rails generate
!
Isso gerará uma classe chamada Carro com os atributos nome e marca, e já terá todos atributos de CRUD padrão, atrás disso existe o Active Record, que é a classe que herdamos para obter os métodos relacionados ao banco de dados, ele é um O.R.M. ( Object Relational Mapping ), uma técnica de mapeamento objeto-relacional que cria uma camada de mapeamento entre nosso modelo de objetos. Ele cria todos nossos campos que precisamos diretamente no banco, sem que seja necessária nossa intervenção, ou escrever as queries brutas em SQL.
O nosso controller irá receber nossas requisições http e veremos como ele controla as rotas.
As migrations são responsáveis pela criação de tabelas, novos campos, alteração etc.
O scaffold gera todos nossos recursos base, como controllers, views, models etc.
Lembre-se de entrar no diretório que criamos a primeira aplicação na aula passada.
Para isso faremos:
rails g scaffold carro nome:string marca:string valor:float quantidade:integer
Note que na criação utilizamos o nome no singular isso é importante para aplicações em Rails, existe um padrão de nomenclaturas a ser respeitado.
Observe que agora nossa aplicação já tem uma série de abstraçẽos geradas conforme nós pedimos para o Rails
gerar, isso incluí rotas de CRUD básicas designadas pelo padrão REST, então terá rotas
Get, Put, Patch, Delete
. Além disso tem rotas para recursos únicos como visualizar um item pelo ID
ou para retornar
todos, como a rota de /carros
, usando o método HTTP GET, note que existem métodos separados dentro
da classe carro para cada uma das ações, pode começar a ver no arquivo
routes.rb
, agora temos uma
linha
com:
resources :carros
Ainda sobre essa geração de código, ele gerou a classe de controller que é responsável pelas configurações
básicas no tratamento dos métodos que vimos nas rotas. Ele se encontra em:
app/controllers/carros_controller.rb
.
Já vimos as rotas, controladores e agora tem o modelo, ele é encontrado em:
app/models/carro.rb
.
Você notará que ele estará apenas herdando a classe ApplicationRecord, então ele não mostra explicitamente os atributos de banco, logo mais abordaremos esse assunto e conheceremos os métodos gerados.
O scaffold também gera uma migration, com a criação de uma tabela carros no banco de dados.
Caso queira conferir o arquivo de configuração do banco de dados vá até, app/config/database.yml
.
Como vimos o Rails trabalha com convenção, seguindo as regras do Rails, ele fornecerá toda estrutura base da aplicação.
Para conferir todas rotas da sua aplicação use o comando:
rake routes
Para criar os banco de dados use:
rake db:create
Normalmente são criados dois bancos de dados, um nome_do_banco_test
, e outro,
nome_do_banco_development
.
Para criar as tabelas no banco de dados use:
rake db:migrate
Esse comando roda as migrações e já cria as tabelas como especificadas nos arquivos.
Caso olhe o seu banco de dados existe uma tabela a mais chamada schema_migrations
, nela contém
todos dados de migrações e versionamentos das mesmas.
O comando rake db:migrate
, só irá executar caso haja alguma alteração nos arquivos de migrations,
caso contrário não terá ação nenhuma.
Agora vamos executar nosso servidor Rails e ver como estamos até agora, faça:
rails s
Assim conseguimos acessar em localhost:3000
, na rota padrão você verá a tela de boas vindas do
Rails, mas queremos ver o que fizemos então coloque na barra de endereços do navegador,
localhost:3000/carros
, já temos uma tela de visualização inicial e um botão para criar um novo, e
quando houver dados, podemos editar, mostrar um único, ou excluir.
Obs.: Para customizar qualquer uma das páginas acesse app/views/carros
, e abra o arquivo
*.html.erb
desejado. Demais configurações podem ser feitas app/assets
também, lá você
consegue utilizar algumas configurações globais.
Obs.: O Rails já vem com compilador Sass embutido, não sendo necessário ferramentas como Gulp.
Neste geramos uma migração em que podemos definir os parâmetros:
rails g migration carros_com_campo_ativo
Sempre consulte a documentação oficial do Rails em caso de dúvidas, vamos colocar uma linha em que adicionamos uma coluna a mais:
add_column :carros, :ativo, :boolean
Para atualizar as tabelas no banco de dados use:
rake db:migrate
Desta forma foi criado mais um campo na tabela, assim já podemos utilizá-lo.
No arquivo index.html.erb
, dentro de
app/views/carros
vamos adicionar mais uma coluna na tabela HTML carro.ativo
deve
existir agora, então lá você pode adicionar uma TAG th
com texto Ativo, e uma TAG
, no corpo da tabela, assim ele irá renderizar o conteúdo.
carro.ativo
Obs.: Lembre-se de parar e iniciar novamente o servidor Rails em caso de algum problema.
Nós apenas colocamos o campo "Ativo" na view, precisamos atualizar agora os demais lugares referentes, como no
formulário
de criação de registro para que tudo funcione corretamente, nesta aula não veremos isso, estamos focados em
entender os generators
, mas
sinta-se à vontade para testar.
Vamos ver agora a criação de um model:
rake g model usuario nome:string login:string senha:string
Para criar um controller:
rake g controller home
Veremos agora como utilizar o controller home que foi criado e configurar para que seja exibido como padrão, rota principal onde todas requisições serão direcionadas.
Para isso edite o arquivo routes.rb
, logo após a linha 2 onde tem os recursos de
:carros
, adicione o código abaixo:
root to: 'home#index'
Pronto, mas note que não temos o método index
ou qualquer outro no nosso controller, inclusive
receberemos um
erro ao acessar a aplicação agora.
Criamos um método index
então:
class HomeController < ApplicationController
def index
end
end
Agora receberemos outro erro pois ele tentará recuperar uma view padrão para exibir mas ela não existe ainda.
Navegue até app/views/home
, crie um arquivo chamado index.html.rb
, dentro dele
coloque:
Home do Site
Agora tudo funcionará, vamos apenas colocar um link para listagem de carros.
Lista de carros
Pronto! Agora temos um link para a lista de carros.
Os outros generators que foram comentados e não foram vistos nessa aula serão abordados nas aulas futuras.
Arquiteto de software, analista, programador, professor. Danilo criou o projeto torne-se um programador, para passar o seu conhecimento para a nova geração. Com o intuito de ser um bom pai, Danilo trabalha muito motivado para garantir o futuro de sua filha.