💎+ 🛤 = ⚡️
Destacado
Texto
# lib/hola.rb
class Hola
def self.hi
puts "Hello world!"
end
end
Lista:
- Item 1
- Item 2
- Item 3
- Item 4
Nota: aclaración
Monoespaciado
I. Consola rails
II. Modelo & base de datos
III. Controladores & rutas
IV. Servicios
V. Pro-tips
- Rails viene con una utilidad de línea de comandos que nos ayuda a generar un montón de código, así como tareas de mantenimiento y gestión de DB.
- Los comandos más útiles:
$ rails console
$ rails server
$ rails generate
$ rails dbconsole
$ rails new app_name [options]
Up & running!
$ rails new my_api --api
$ bundle install
$ rails server
Muchos más en:
- Para generar un modelo desde la línea de comandos:
$ rails g[enerate] model ModelName [prop_1]:[datatype] ...
:binary
:boolean
:date
:datetime
:decimal
:float
:integer
:primary_key
:string
:text
:time
:timestamp
$ rails db:migrate
- Una migración es una porción de código sql que sirve de histórico de cambios
- De esta forma, todo el equipo siempre tiene una versión sincronizada de la DB en entorno dev
- Deshacer (rollback)
- Alterar un modelo ya existente
- Tipos de datos
- Nombre de la columna
- Nuevos props
Una migración permite deshacer un cambio, o alterar a posteriori nuestro esquema de base de datos:
- Para generar un controlador desde la línea de comandos:
$ rails g[enerate] controller ModelName
class ResourceController < ApplicationController
skip_before_action :authorize_request, only: [:index, :show]
before_action :set_resource, only: [:show, :update, :destroy]
# GET /resource
def index
...
end
# GET /resource/:id
def show
...
end
# POST /resource
def create
...
end
# PATCH /resource/:id
def update
...
end
# DELETE /resource/:id
def destroy
...
end
private
def resource_params
params.permit(:title, :description, ...)
end
def set_resource
@resource = Resource.find(params[:id])
end
end
# routes.rb
Rails.application.routes.draw do
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
resources :jobs
end
jobs GET /jobs(.:format) jobs#index
POST /jobs(.:format) jobs#create
job GET /jobs/:id(.:format) jobs#show
PATCH /jobs/:id(.:format) jobs#update
PUT /jobs/:id(.:format) jobs#update
DELETE /jobs/:id(.:format) jobs#destroy
# routes.rb
Rails.application.routes.draw do
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
resources :venues do
resources :services do
resources :reservations do
collection do
get 'availability/:date', to: 'reservations#availability'
end
end
end
resources :spaces
end
end
¿Por qué usar servicios?
No entienden cómo puedo estar tan obsesionado con la realidad. Eso es porque yo soy... estoy por delante de ellos. Porque ¿ellos qué hacen? Cosas con brochazos. Eso no tiene ningún mérito para mí. Eso es igual a mierda. Abstracción igual a mierda. Es así.
Antonio López, en La Hora Chanante
Objetos
Modelos
Controladores
Servicios
Real
Abstracto
class MyService
def initalize(params)
@var_1 = params[:var_1]
...
end
def call
...
end
private
def helper_function
...
end
end
class UserAdmissionService
def initialize(user, mailer: AroundMailer)
@user = user
@mailer = mailer
end
def call
set_temporal_acces_code
notify_user(@user.password)
@user.status = 'admitted'
@user.save!
end
private
def set_temporal_acces_code
@user.generate_temporal_access_code
end
def notify_user(temporal_password)
AroundMailer.notify_user_accepted(@user, temporal_password).deliver
end
end
😎
class AdmissionsController < ApplicationController
def accept_user
user = User.find(params[:id])
UserAdmissionService.new(user).call
json_response({ message: 'User successfuly notified' }, 200)
end
end
😎
class AdmissionsController < ApplicationController
def accept_user
@user = User.find(params[:id])
@user.password = 4.times.map{ Random.rand(9) }.join(", ").tr(", ", "")
AppMailer.notify_user_accepted(@user, temporal_password).deliver
@user.status = 'admitted'
@user.save!
json_response({ message: 'User successfuly notified' }, 200)
end
end
🤔
app
└── services
└── service_module
├── example_service.rb
└── another_service.rb
- pry / irb
- rails console
- rails secrets & env config (yml)
- jobs asíncronos & crontab
- loggin & bughunting
- ... ?
😀