Tag: ruby, rails, mvc, backend, active record, framework
Livello: intermedio
TL;DR: Framework MVC full-stack basato su Ruby. Privilegia la convenzione sulla configurazione (CoC) e il principio DRY per massimizzare la velocità di sviluppo.
Pattern MVC (Model-View-Controller) per separare i dati, l'interfaccia utente e la logica di controllo.
Convention over Configuration (CoC): regole di naming predefinite evitano di dover scrivere configurazioni esplicite.
Don't Repeat Yourself (DRY): promuove il riutilizzo del codice per evitare duplicazioni.
Active Record: sistema ORM integrato che mappa le tabelle del database su oggetti Ruby.
Routing: il file config/routes.rb associa gli URL in ingresso alle azioni dei controller.
Migrazioni: script Ruby che permettono di evolvere lo schema del database in modo incrementale.
Action View: gestisce il rendering dei template, tipicamente utilizzando la sintassi ERB.
Asset Pipeline: sistema per elaborare, concatenare e minimizzare file JavaScript e CSS.
Scaffolding: sistema per generare rapidamente lo scheletro di risorse CRUD funzionanti.
Q: Qual è la differenza tra has_many :through e has_and_belongs_to_many?R: Uso has_many :through quando il modello di join necessita di validazioni, callback o attributi aggiuntivi. Uso l'altro solo per join puramente relazionali.
Q: Come risolvi il problema delle query N+1 in Active Record?R: Utilizzo i metodi includes, preload o eager_load per caricare le associazioni in memoria con un numero ridotto e fisso di query SQL.
Q: Cosa sono i callback di Active Record e quando vanno evitati?R: Sono hook che si attivano durante il ciclo di vita dell'oggetto. Li evito quando introducono logica esterna, preferendo in quei casi dei service object.
Creare "fat controllers": inserire troppa logica di business nei controller invece di spostarla nei modelli o in classi dedicate.
Abusare dei callback di Active Record, rendendo i test lenti e introducendo side effect imprevedibili.
Dimenticare di definire gli indici a livello di database per le chiavi esterne durante la scrittura delle migrazioni.
Ignorare la sanitizzazione degli input nei metodi where costruiti con stringhe grezze, esponendosi a SQL injection.
# Creare un nuovo progetto con PostgreSQL
rails new my_app -d postgresql
# Generare un modello
rails generate model User name:string age:integer
# Eseguire le migrazioni pendenti
rails db:migrate
# Esempio di query con eager loading e scope
@users = User.includes(:posts).where(active: true).order(created_at: :desc)
# Esempio di controller
class UsersController < ApplicationController
def index
@users = User.all
end
end
[ ] Pattern avanzati come Service Object, Form Object e Query Object.
[ ] Implementazione e configurazione di Active Job con Sidekiq.
[ ] Meccanismi di caching (Fragment caching, Russian Doll caching).
Ruby on Rails Guides
Ruby on Rails API Documentation