KelvinVenancio - Blog

Abordando temas sobre desenvolvimento, em especial com o framework Rails

População Do Banco E Paginação, Com O Framework Rails

Fala galera, todos bem? Espero que sim! :)

De início, hoje falaremos de população de banco e paginação, para aplicações criadas com o framework Rails. Será necessário que você tenha em sua maquina instalados, o Ruby e o Rails.

Lista das gems que iremos utilizar, para criação desta pequena app:

  • faker
  • will_paginate e will_paginate-bootstrap
  • bootstrap-generators

Bom, sabendo do que você vai precisar, vamos falar um pouco de cada gem, e posteriormente, a instalação e configuração destas.

Gem Faker

Está gem eu considero muito útil para popular banco, com informações fake, mas que ficam com um ‘astral’, digamos assim, mais próximo do verdadeiro, para que você possa apresentar seu projeto ao cliente de forma mais elegante e sem precisar criar dezenas ou centenas de informações na mão.

Will Paginate

Se você como eu, vem de outras linguagens, e acha um saco criar paginação, utilizando o Rails com essa gem, seus problemas literalmente acabam por aqui.

Bootstrap Generators

Utilizo esta gem para deixar o projeto mais simples e elegante, visto que não queria deixar com o visual limpo do scaffold, e também para não trabalhar muito com estilização (não é meu forte).

Gerando uma nova app, o scaffold básico e instalação das gems.

Acredito que todos já estão acostumados e sabem o quão é fácil gerar um novo projeto com Rails, mas pra quem ainda não sabe, aqui vai. Em seu terminal, rode os comandos abaixo, linha por linha:

#] rails new nome_projeto
#] cd nome_projeto
#] rails s

Após gerar e entrar na pasta do projeto, você vai iniciá-lo com o ‘rails s’ e acessar em seu navegador o link “http://localhost:4000/”. Caso não haja nenhum erro, você verá a tela padrão do Rails e a partir daí podemos prosseguir.

De volta ao terminal, pressione CTRL + C para parar o servidor, e vamos gerar o scaffold básico da aplicação e migrar o banco:

#] rails g scaffold User nome:string email:string
#] rake db:create db:migrate

Após gerar o scaffold básico, abra a pasta do projeto com seu editor de texto favorito (eu utilizo o sublime text 3), e altere o arquivo ‘routes.rb’ que fica dentro da pasta ‘config’, adicionando a linha abaixo, antes da palavra ‘end’:

root ‘users#index’

Após adição da linha, salve o arquivo, volte ao terminal e inicie o servidor novamente com o comando ‘rails s’. No navegador, pressione F5, e você verá a tela inicial da aplicação. O CRUD já funciona completo. A partir daí você pode criar, listar, atualizar e remover usuários.

Agora que o basicão já funciona, vamos instalar as gems que iremos utilizar, para que possamos trabalhar em cima delas. Em seu editor de texto, abra o arquivo ‘Gemfile’, e adicione as seguintes linhas antes da palavra ‘end’ e salve-o:

# Personalizações App
gem 'bootstrap-generators', '~> 3.3.1'
gem 'faker'
gem 'will_paginate', '~> 3.0.7'
gem 'will_paginate-bootstrap', '~> 1.0.1'

Vá para o terminal e digite o comando abaixo:

#] bundle install

Pronto, nossa aplicação está funcionando numa boa, com as gems instaladas.

Populando o banco, utilizando a gem ‘faker’ e o arquivo seeds.rb.

O arquivo seeds, para quem não conhece, serve para que você possa adicionar registros necessários para popular o banco de dados com alguns valores fakes ou valores padrão que você deseje adicionar. Vamos editá-lo, e popular o banco para a tabela User, com 20 registros de nome e e-mail.

Primeiramente abra o arquivo ‘seeds.rb’ que está localizado dentro da pasta ‘db’, e insira o código abaixo e salve-o:

20.times do |i|
    user_name = Faker::Name.name
    user_email = Faker::Internet.email
    user = "#{user_name} - #{user_email}"
    puts "Cadastrando #{user}"
    User.create(nome: user_name, email: user_email)
end

Este código é bem simples! Basicamente o que ele fará é um loop de 20x (você pode mudar este valor trocando o número 20 para outro qualquer), sendo que em cada loop, um valor será atribuído ao nome e e-mail, vindo da classe Faker, utilizada justamente para popular o banco com informações, para que você não as digite por muitas vezes, e por fim, criando um registro a cada loop.

Após criado, salvo e entendido o código acima, voltamos para o terminal, e rodamos o seguinte comando:

#] rake db:seed

E ele irá popular a tabela User, com nome e e-mail, 20 vezes. Inicie o servidor e acesse a aplicação no navegador, para analisar os resultados.

Dando um visual moderno, com o Bootstrap.

Para deixarmos o nosso projeto com uma cara mais bonita, rode o seguinte comando:

#] rails generate bootstrap:install

Ele pedirá uma confirmação, e você deverá confirmar com Y. Feito isso, inicie o servidor novamente, acesse o seu navegador e o resultado deve ser como o da imagem abaixo:

Home

Por fim, iremos adicionar paginação ao nosso projeto.

Como a gem já encontra-se instalada, bastará apenas utilizarmos. Vamos alterar o nosso controller ‘users_controller.rb’, que está dentro do diretório ‘app/controllers/’. Essa modificação, será apenas para alterarmos o método index, veja:

Altere de:

def index
    @users = User.all
end

Para:

def index
    @users = User.all.order("created_at DESC").paginate(page: params[:page], per_page: 5)
end

E após isso, altere a view ‘index.html.erb’ que está dentro de ‘app/views/users/’, adicionando o conteúdo abaixo, após o fechamento da tabela:

<%= will_paginate @users, renderer: BootstrapPagination::Rails, previous_label: "Anterior", next_label: "Próxima" %>

Pronto! Salve tudo, vá ao terminal, inicie/reinicie o servidor e acesse em seu navegador. O resultado deve ser como o abaixo:

Paginação


Então é isso, pessoal. Queria apenas passar para vocês como é tranquilo trabalhar com paginação e população de dados em nossos projetos com o framework Rails.

Espero que tenham gostado e me deixe seu feedback abaixo nos comentários. Críticas, dúvidas, sugestões e melhorias? Estou aberto!

Abraços por trás! :*

Links Úteis:

https://github.com/decioferreira/bootstrap-generators “Bootstrap Generators”

https://github.com/stympy/faker “Faker Gem”

https://github.com/mislav/will_paginate “Will Paginate”

https://rubygems.org/ “Buscar Gems”