Rails Concerns: Aprenda a utilizar facilmente

Rails Concerns: Aprenda a utilizar facilmente

Você já utilizou Concerns no seu APP Rails? O Ruby On Rails é um framework que preza pela qualidade, simplicidade e reutilização de códigos, utilizar os Concerns é uma boa maneira de aumentar a quantidade de tudo isto nos seus Models.

Neste artigo você vai aprender a dominar o uso de Concerns através de um um exemplo prático passo a passo, além disso vai aprender também como usar o Bootstrap, Devise e etc no seu APP Rails, então vem com a gente \o/

 

O que são concerns, porque e quando usar?

Os Concerns servem para compartilhar recursos entre seus models (métodos, chamadas de callbacks e etc) de maneira simples (basta incluir uma linha em todos os models que quiser incluir os recursos), então usar os concerns ajuda a deixar seu código mais limpo.

A sugestão é que você use um concern sempre que mais de um model precise de métodos similares, como por exemplo, uma validação especial no texto, enviar um email depois que o record é criado, incluir comentários e etc.

 

O que vamos criar

Vamos criar um pequeno APP onde as pessoas podem publicar um pensamento (uma frase) e receber observações (comentários) sobre ele, para exercitar o uso de Concerns vamos incluir algumas possíveis reações a esses pensamentos (como no Facebook, só que no nosso caso teremos as seguintes reações: Concordo, Amei e Discordo).

No final do APP você será convidado(a) a realizar um pequeno desafio, onde vai usar o mesmo concern para incluir as reações também nas observações (comentários) recebidos naquele pensamento.

 

 


Ferramentas

  • * Rails 5.2
  • * Ruby 2.5
  • * jQuery
  • * twitter-bootstrap-rails (gem)
  • * devise (gem)
  • * devise-bootstrapped (gem)
  • * acts_as_commentable (gem)


Obs
: Caso você não tenha o Rails instalado, acesse esse tutorial 🙂

 

Passo a passo da criação do APP

Instalando o Bootstrap e preparando o layout

Primeiro vamos gerar nosso APP Rails, instalar o Bootstrap e deixar os links de login e logout preparados (apenas para dar uma aparência mais interessante ao projeto).

 

1 – Para começar crie o projeto com a versão 5.2 do Rails rodando no console:

2 – Usaremos o jQuery e twitter-bootstrap-rails, então adicione ao seu Gemfile:

3 – Para incluir o bootstrap e o Jquery no javascript, substitua o conteúdo de app/assets/javascripts/applications.js por:

4 – Instale as gems rodando:

5 – Rode o generate do Bootstrap:

6 – Por fim, substitua o código do arquivo app/views/layouts/application.html.erb por:

 

Incluindo a autenticação

Nessa parte iremos incluir o Devise (uma gem que ajuda na autenticação) e criaremos nossas telas de login, signUp e etc já com as classes do Bootstrap (usando o generate: rails generate devise:views:bootstrapped).

 

1 – Adicione a sua Gemfile:

2 – Para instalar a gem e o install do devise, execute:

3 – Gere o model e as views do devise:

4 – Crie o Db e rode as migrations:

5 – Para finalizar esta etapa, adicione o seguinte callback ao arquivo app/controllers/application_controller.rb

 

Incluindo os “Pensamentos” no APP:

Vamos criar o controller e as views principais do APP usando o Scaffold, nessa parte o usuário já vai poder criar, editar e excluir seus “pensamentos”.

 

1 – Crie o Scaffold de Thought rodando no console:

2 – Adicione a seguinte linha em config/routes.rb para definir o nosso root ‘/’:

3 – Agora vamos ajustar o conteúdo da view app/views/thoughts/index.html.erb, substituía o conteúdo dela por:

4 – Substitua o conteúdo da view app/views/thoughts/_form.html.erb por:

5 – Ao criar um novo pensamento, precisamos referenciar o usuário da sessão atual como dono então no controller Thoughts (app/controller/thoughts_controller.rb), substitua a action create por:

 

Adicionando os comentários

Nessa parte vamos preparar a base do APP para receber comentários nos pensamentos, para fazer isso vamos usar a gem “acts_as_commentable”.

 

1 – Podendo criar pensamentos, vamos agora adicionar a funcionalidade de realizar observações, então primeiro adicione ao seu Gemfile:

2 – Instale a gem e rode o generate:

3 – Vá até a migration gerada no passo anterior (db/migrates/…_create_comments.rb) e defina a versão para 4.2 como no exemplo abaixo:

4 – Rode as migrations:

5 – No Model Thought (app/models/thought.rb) adicione a seguinte linha:

6 – Gere o controller Observations rodando:

7 – Coloque no controller gerado:

8 – Precisamos de uma rota para criar uma Observation, em config/routes.rb adicione:

9 – Tendo a possibilidade de realizar observações, precisamos recuperá-las quando acessarmos um pensamento, em app/controller/thoughts_controller.rb substitua o método show por:

 

Preparando as “reações”:

1 – Crie o model React rodando no console:

2 – No model react adicione:

 

Criando nosso Concerns:

Finalmente chegou o momento de criarmos o nosso concern, o objetivo dele é permitir que adicionemos reações a qualquer model simplesmente incluindo ele.

 

1 – Em app/models/concerns crie um arquivo chamado reactable.rb e adicione o seguinte código

Obs: Em “included” estamos dizendo que todo model que possuir esse concern vai ter o “has_many :reacts, as: :reactable”, além disso também vamos disponibilizar para o model os métodos: react, react?, update_react e remove_reaction.

2 – Inclua a linha ao model Thought:

Reactable agora faz parte do nosso model Thought.
Percebendo que a reação não pertencia a alma de nosso model, então a extraímos para um módulo dentro de Concerns.
Além da vantagem de diminuir nosso model, agora podemos reutilizar nosso código em qualquer outro model com apenas uma linha -> include ModuleName

É muito fácil não?

 

3 – Crie um controller chamado Reacts:

4 – Atualize o conteúdo do controller para:

5 – Para criar nossas views rode:

6 – Inclua as rotas do controller react em routes.rb:

7 – No arquivo remove_reaction.js.erb coloque:

8 – No arquivo app/views/reacts/react.js.erb coloque:

9 – Adicione o seguinte trecho a applications.css:

10 – Substitua o código do arquivo app/views/thoughts/show.html.erb por:

11 – Pronto, agora é só levantar a aplicação e reagir!!!

 

Resultado do APP

rails exemplo

 

Desafio de fixação

Altere o APP para incluir as reações nas observações (comentários), com isso você vai fixar melhor o uso de concerns e também vai aprender mais sobre as views e o JS no APP.
Depois de fazer o desafio, comenta ai em baixo dizendo o que achou e deixe o link para o projeto no seu Github \o/

Conclusão

Como podemos perceber neste breve projeto, usar os Concerns é uma boa prática de desenvolvimento que reforça o padrão DRY (Não se repita) e o Ruby on Rails é um framework que valoriza muito está prática.

Então realize o desafio proposto, deixa um comentário ai em baixo dizendo se gostou e aproveite esse conhecimento para tornar seus projetos ainda melhores \o/



12 formas de vencer o bloqueio criativo e escrever textos memoráveis (e 6 dicas extras)

Não perca nenhum conteúdo

Receba nosso resumo semanal com os novos posts, cursos, talks e vagas \o/




Você é novo por aqui?

Primeira vez no OneBitCode? Curtiu esse conteúdo? O OneBitCode tem muito mais para você!

O OneBitCode traz conteúdos de qualidade e em português sobre programação com foco em Ruby on Rails e outras tecnologias como Angular, Ionic, React, desenvolvimento de Chatbots e etc.

Se você deseja aprender mais, de uma forma natural e dentro de uma comunidade ativa, visite nosso Facebook e nosso Twitter, veja os screencasts e talks no Youtube, alguns acontecimentos no Instagram, ouça os Podcasts e faça parte de nossa Newsletter.

Além disso, também estamos com alguns e-Books muito interessantes para quem deseja se aprimorar como programador e também como freelancer (os e-Books são gratuitos!):

Espero que curta nossos conteúdos e sempre que precisar de ajuda com os tutoriais, fala com a gente! Seja por Facebook ou e-mail, estamos aqui para você 🙂

Bem-vindo à família OneBitCode \o/

junho 16, 2018

5
Deixe um comentário

avatar
3 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
GuilhermeLeonardo ScorzaRONALDO CARNEIRODaniel Oliveira Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
Daniel Oliveira
Visitante
Daniel Oliveira

Excelente conteúdo, não conhecia e esse tutorial serviu muito, agora irei estudar mais sobre o assunto!

Leonardo Scorza

Baooo 🙂

RONALDO CARNEIRO
Membro
RONALDO CARNEIRO

Excelente artigo parabéns viu exercitar um pouco aqui tbm.

Leonardo Scorza

\o/

Guilherme
Membro
Guilherme

Leonardo Scorza sempre arrasando com os conteúdo de Ruby.

Feito com s2 por OneBitCode
%d blogueiros gostam disto: