Ruby on Rails
Tags: ruby, programming, braziliandevs
Published: 2023-07-27 16:09:22

---
title: Ruby on Rails
published: true
description: Ruby on Rails
cover_image: https://d32myzxfxyl12w.cloudfront.net/images/blog_images/be602627973000d99f6ba9a43aba117b82aa5e26.jpg?1649061518
tags: ruby, programming, braziliandevs
---

Ruby on Rails é um framework popular de desenvolvimento web em Ruby, que adota o padrão arquitetural MVC para separar a aplicação em Model, View e Controller. Com ênfase em "Convenção sobre Configuração", o Rails permite desenvolver rapidamente com menos código. Oferecendo operações CRUD simplificadas, suporte a Gemas para adicionar funcionalidades extras e Scaffolding para prototipagem ágil. Além disso, o framework conta com Active Record para mapear dados do banco de dados em objetos Ruby e Rake para executar tarefas importantes. O Rails ainda garante segurança integrada e possui uma comunidade ativa para suporte e aprendizado.

Os principais pontos para entender melhor o Ruby on Rails. Dominar esses pontos ajudará você a entender melhor o funcionamento do Ruby on Rails e a tirar o máximo proveito desse poderoso framework de desenvolvimento web.

## MVC (Model-View-Controller)

O Ruby on Rails segue o padrão arquitetural Model-View-Controller, que separa a aplicação em três componentes principais. O Model representa a camada de dados e a lógica de negócios, o View é responsável pela interface do usuário e o Controller manipula as interações do usuário e coordena as ações.

* Imagine que estamos criando um aplicativo de lista de tarefas (to-do list). O Model seria a classe que representa uma tarefa, contendo atributos como título, descrição e status. O View seria a interface do usuário, onde ele verá a lista de tarefas e poderá adicionar novas tarefas. O Controller seria responsável por manipular as requisições do usuário, como adicionar uma nova tarefa à lista.

[https://guiarails.com.br/getting_started.html#mvc-e-voce](https://guiarails.com.br/getting_started.html#mvc-e-voce)

## Convenção sobre Configuração

O Rails segue o princípio de "Convenção sobre Configuração", o que significa que ele possui uma série de convenções bem definidas que permitem que os desenvolvedores escrevam menos código para configurar a aplicação. Isso torna o desenvolvimento mais rápido e fácil.

* Ao criar um novo projeto Ruby on Rails, o Rails já define a estrutura de diretórios e arquivos padrão para o projeto. Por exemplo, os modelos devem ser colocados na pasta "app/models", os controladores em "app/controllers" e as visualizações em "app/views".

[https://guiarails.com.br/getting_started.html#criando-a-aplicacao-blog](https://guiarails.com.br/getting_started.html#criando-a-aplicacao-blog)

| Arquivo/Pasta	| Objetivo |
|---|---|
| app/ | Contém os controllers, models, views, helpers, mailers, channels, jobs, e assets para sua aplicação. Você irá se concentrar nesse diretório pelo restante desse guia. |
| bin/ | Contém o script rails que inicializa sua aplicação e contém outros scripts que você utiliza para configurar, atualizar, colocar em produção ou executar sua aplicação. |
| config/ | Contém configurações de rotas, banco de dados entre outros de sua aplicação. Este conteúdo é abordado com mais detalhes em Configuring Rails Applications. |
| config.ru | Configuração Rack para servidores baseados em Rack usados para iniciar a aplicação. Para mais informações sobre o Rack, consulte Rack website. |
| db/ | Contém o schema do seu banco de dados atual, assim como as migrations do banco de dados. |
| Gemfile | |
| Gemfile.lock | Esses arquivos permitem que você especifique quais dependências de gem são necessárias na sua aplicação Rails. Esses arquivos são usados pela gem Bundler. Para mais informações sobre o Bundler, |  |acesse o website do Bundler. |
| lib/ | Módulos extendidos da sua aplicação. |
| log/ | Arquivos de log da aplicação. |
| public/ | Contém arquivos estáticos e assets compilados. Quando sua aplicação está rodando esse diretório é exposto como ele está. |
| Rakefile | Este arquivo localiza e carrega tarefas que podem ser rodadas por linhas de comando. As tarefas são definidas nos componentes do Rails. Ao invés de editar o Rakefile, você deve criar suas próprias |  |tarefas adicionando os arquivos no diretório lib/tasks da sua aplicação. |
| README.md | Este é um manual de instruções para sua aplicação. Você deve editar este arquivo para informar o que seu aplicativo faz, como configurá-lo e assim por diante. |
| storage/ | Arquivos de armazenamento ativo do serviço de disco. Mais informações em Active Storage Overview. |
| test/ | Testes unitários, fixtures, e outros tipos de testes. Mais informações em Testing Rails Applications. |
| tmp/ | Arquivos temporários (como cache e arquivos pid). |
| vendor/ | Diretório com todos os códigos de terceiros. Em uma típica aplicação Rails inclui vendored gems. |
| .gitignore | Este arquivo diz ao Git quais arquivos (ou padrões) devem ser ignorados. Acesse GitHub - Ignoring files para mais informações sobre arquivos ignorados. |
| .ruby-version | Este arquivo contém a versão padrão do Ruby. |

## CRUD Simplificado

O Rails oferece operações CRUD (Create, Read, Update, Delete) de forma simples e direta. Com apenas algumas linhas de código, é possível criar interfaces para interagir com bancos de dados.

* Para criar as operações CRUD para a nossa lista de tarefas, basta executar o seguinte comando no terminal Rails

```shell
rails generate scaffold Task title:string description:text status:boolean
```

[https://guiarails.com.br/getting_started.html#operacoes-crud](https://guiarails.com.br/getting_started.html#operacoes-crud)

## Gemas (Gems):

As Gemas são pacotes de código Ruby que podem ser facilmente adicionados à aplicação para adicionar funcionalidades extras. O Ruby on Rails possui uma grande quantidade de gemas disponíveis, o que facilita a incorporação de recursos adicionais à sua aplicação.

* Suponha que precisamos adicionar um calendário à nossa aplicação de lista de tarefas. Podemos pesquisar uma gema existente para isso, como a **'simple_calendar'**. Então, adicionamos essa gema ao arquivo "Gemfile" e executamos "bundle install" para instalá-la. O Gemfile é o arquivo que contém todas as gemas que serão utilizadas na aplicação com a versão definida. O Gemfile.lock força as versões de cada gem que estão sendo utilizadas no seu projeto. Isso é pra evitar que o projeto fique com verões de gems diferentes em outros lugares.

Em seguida, podemos seguir a documentação da gema para integrá-la às nossas visualizações e controladores para exibir um calendário de tarefas.

```shell
gem install simple_calendar
```

[https://rubygems.org/](https://rubygems.org/)

## Scaffolding

O Scaffolding é uma ferramenta do Rails que permite gerar automaticamente partes básicas de uma aplicação, como modelos, controladores e visualizações. Isso é útil para criar rapidamente protótipos de funcionalidades.

* Como mencionado no exemplo anterior, o comando "rails generate scaffold" cria rapidamente todas as partes básicas necessárias para um recurso (no exemplo, "Task"), incluindo o modelo, o controlador e as visualizações para as operações CRUD.

[https://www.rubyguides.com/2020/03/rails-scaffolding/](https://www.rubyguides.com/2020/03/rails-scaffolding/)

```shell
rails generate scaffold books
```
```
This example creates:

A BooksController
A Book model
A new resources :books route added to your config/routes.rb file
A set of testing-related files
View files under app/views/books (five in total)
```

## Active Record

O Active Record é a camada de ORM (Mapeamento Objeto-Relacional) do Rails. Ele mapeia os registros do banco de dados para objetos Ruby e vice-versa, permitindo que você trabalhe com dados do banco de dados de forma orientada a objetos.

* O Active Record permite que você defina facilmente um modelo e use-o para interagir com o banco de dados. Por exemplo, com o modelo "Task" criado pelo scaffolding, podemos criar uma nova tarefa e salvá-la no banco de dados desta forma:

```ruby
task = Task.new(title: 'Comprar mantimentos', description: 'Ir ao supermercado', status: false)
task.save
```

[https://guiarails.com.br/active_record_basics.html](https://guiarails.com.br/active_record_basics.html)

## Rake

Rake é uma ferramenta de linha de comando que vem com o Rails e permite executar tarefas como migrações de banco de dados, execução de testes, entre outras operações úteis.

* O Rake permite que você execute tarefas definidas no Rakefile do projeto. Por exemplo, podemos criar uma tarefa personalizada para imprimir todas as tarefas no console:

```ruby
# No Rakefile
task :list_tasks do
  tasks = Task.all
  tasks.each do |task|
    puts "#{task.title} - #{task.description} (#{task.status})"
  end
end

# No terminal
rake list_tasks
```

[https://guiarails.com.br/command_line.html](https://guiarails.com.br/command_line.html)

## Rotas (Routes)

O Rails usa um sistema de roteamento para direcionar as solicitações HTTP para os controladores adequados. Isso permite que você defina facilmente as URLs da aplicação.

* Podemos definir rotas no arquivo "config/routes.rb". Por exemplo, para definir uma rota para exibir uma lista de tarefas, faríamos o seguinte:

```ruby
# No config/routes.rb
Rails.application.routes.draw do
  resources :tasks
end
```

Isso criará as seguintes rotas:

GET /tasks (index)
GET /tasks/new (new)
POST /tasks (create)
GET /tasks/:id (show)
GET /tasks/:id/edit (edit)
PATCH /tasks/:id (update)
PUT /tasks/:id (update)
DELETE /tasks/:id (destroy)

O Rails gera automaticamente essas rotas e as mapeia para as ações correspondentes no controlador.

Para fixar a rota você pode usar asssim:

```ruby
# No config/routes.rb
Rails.application.routes.draw do
  resources :tasks, only: [:index]
end
```

[https://guiarails.com.br/configuring.html#initializers](https://guiarails.com.br/configuring.html#initializers)

## Segurança

O Rails possui recursos integrados para ajudar a proteger a aplicação contra ameaças comuns, como ataques de injeção de SQL, ataques CSRF (Cross-Site Request Forgery) e mais.

* O Rails possui recursos de segurança integrados, como proteção contra ataques CSRF. Isso é feito automaticamente através do uso de um token de autenticidade em formulários gerados pelo Rails.

[https://guiarails.com.br/getting_started.html#seguranca](https://guiarails.com.br/getting_started.html#seguranca)

## Comunidade e Documentação

O Ruby on Rails possui uma comunidade ativa e solidária, com muitos recursos de aprendizado, fóruns e documentação disponíveis online. É fácil encontrar ajuda e respostas para dúvidas através da comunidade Rails.

* A comunidade Rails é bastante ativa, e você pode encontrar muita documentação e recursos online. Por exemplo, você pode visitar o site oficial do Ruby on Rails (https://rubyonrails.org/) para encontrar a documentação oficial e o GitHub (https://github.com/rails/rails) para acessar o código-fonte e recursos adicionais.

O Ruby on Rails é uma ferramenta poderosa e eficiente para o desenvolvimento web, permitindo aos desenvolvedores criar aplicações de forma ágil e produtiva. Ao seguir o padrão MVC e adotar a "Convenção sobre Configuração", o framework simplifica a estruturação e configuração do projeto, acelerando o processo de desenvolvimento. Com recursos como Gemas, Scaffolding, Active Record e Rake, o Rails oferece ferramentas práticas e integradas para lidar com diversas tarefas com facilidade. Além disso, a preocupação com a segurança e a presença de uma comunidade ativa tornam o Ruby on Rails uma escolha popular e confiável para desenvolvedores em todo o mundo. Se você deseja construir aplicações web de forma eficiente e segura, dominar os principais conceitos do Ruby on Rails é essencial para obter resultados bem-sucedidos e satisfatórios.

**Empresas que usam Ruby:** [https://www.google.com/search?q=ruby+on+rails+plataforms&oq=ruby+on+rails+plataforms&aqs=edge..69i57j0i22i30l2j0i390i650l3j69i64l2.7987j0j1&sourceid=chrome&ie=UTF-8](https://www.google.com/search?q=ruby+on+rails+plataforms&oq=ruby+on+rails+plataforms&aqs=edge..69i57j0i22i30l2j0i390i650l3j69i64l2.7987j0j1&sourceid=chrome&ie=UTF-8)


[https://rubyonrails.org/](https://rubyonrails.org/)