Criando CRUD com a mágica do Scaffold no Rails
CRUD (create, read, update, delete) é o esqueleto básico de qualquer aplicação, praticamente a razão que a maioria existe. Afinal, criar registros que depois são "puxados" para relatórios e/ou cálculos é o que a maioria das pessoas querem quando usam e/ou buscam sistemas.
Para quem já desenvolve em outra linguagem isso não é novidade. E nem deve ser a parte da qual mais gosta. Vamos jogar aberto?
CRUD, apesar de necessário, é meio chato, né? É uma tarefa que podemos chamar de repetitiva. Claro que em geral as classes e os objetos ficam mais complexos e nos desafiam a buscar lógicas e soluções criativas, porém, na essência, todo CRUD é igual:
- Create = Criação, pegue estas informações e crie dados no banco
- Read = Consulta, traga estes dados e mostre-os de alguma forma
- Update = Atualização, mude alguma informação nos dados
- Delete = Destruição: pode acabar com tudo, não preciso mais destes dados
Para fugirmos da parte repetitiva, e podermos focar nossos esforços nas questões peculiares e/ou de fato inovadoras da nossa aplicação, o Rails nos oferece a magia do Scaffold! Este motor do Rails faz todo o básico do CRUD para nós! Depois a gente só incrementa e customiza conforme a necessidade da aplicação!
Vamos lá?
Para começar temos que ter uma aplicação Rails criada. Nesta série nós fizemos isso no primeiro post.
1 - Rode o comando 'rails generate scaffold'
Este é o comando que vai mandar o Rails criar tudo no nosso CRUD, mas precisamos acrescentar os detalhes como o nome da classe e os campos que ela deverá ter.
No meu caso, a aplicação sampope é um pet project com foco em soluções para turismo. Esta primeira coisa a ser criada será simplesmente chamada de Item.
Um item desta aplicação vai se referir a algo que será vendido. Poderá ser um passeio, um serviço de transporte, ou qualquer outra coisa que fará parte dos roteiros e das vendas. Neste primeiro momento, ele terá apenas nome (name) e preço (price).
O comando completo ficará assim:
rails generate scaffold Item name price:integer
Este comando diz: "Rails, por favor crie todo o CRUD para uma classe chamada Item que tem os atributos nome e preço, sendo que preço é um número."
Note que para price, nós especificamos integer e para name não especificamos nada. Isso é porque na ausência do tipo de dado, o Rails usará seu padrão, que é string, resultando numa coluna do tipo VARCHAR sendo criada no banco de dados.
Quando a gente rodar o comando, o Rails vai nos avisar das várias coisas que está fazendo. Veja abaixo o que apareceu para mim. Ao longo do desenvolvimento da nossa aplicação vamos aprender mais sobre cada um destes passos.
vivipoit ~/Projects/sampope (master) > rails generate scaffold Item name price:integer Running via Spring preloader in process 2540 invoke active_record create db/migrate/20200519100714_create_items.rb create app/models/item.rb invoke rspec create spec/models/item_spec.rb invoke resource_route route resources :items invoke scaffold_controller create app/controllers/items_controller.rb invoke erb create app/views/items create app/views/items/index.html.erb create app/views/items/edit.html.erb create app/views/items/show.html.erb create app/views/items/new.html.erb create app/views/items/_form.html.erb invoke rspec create spec/requests/items_spec.rb create spec/views/items/edit.html.erb_spec.rb create spec/views/items/index.html.erb_spec.rb create spec/views/items/new.html.erb_spec.rb create spec/views/items/show.html.erb_spec.rb create spec/routing/items_routing_spec.rb invoke helper create app/helpers/items_helper.rb invoke rspec create spec/helpers/items_helper_spec.rb invoke jbuilder create app/views/items/index.json.jbuilder create app/views/items/show.json.jbuilder create app/views/items/_item.json.jbuilder invoke assets invoke scss create app/assets/stylesheets/items.scss invoke scss create app/assets/stylesheets/scaffolds.scss
2 - Rode o comando 'rails db:migrate'
Um dos arquivos criados na ação acima foi o que chamamos de migration, que guarda instruções sobre o que deve ser criado no banco de dados. Rodamos o comando rails db:migrate para executar estas instruções e nos certificar de que está tudo em ordem para os nossos dados serem criados e manipulados lá.
vivipoit ~/Projects/sampope (master) > rails db:migrate == 20200519100714 CreateItems: migrating ====================================== -- create_table(:items) -> 0.0118s == 20200519100714 CreateItems: migrated (0.0119s) =============================
Pronto!
É só isso! Agora nós podemos rodar rails s e navegar a nossa aplicação para ver que temos uma index para itens, que podemos criar itens, atualizar informações dos itens, e até excluir alguns! Tudo isso agora existe por causa de apenas 2 comandos!



Nenhum comentário:
Postar um comentário