Ruby on Rails — Cheat Sheet

Tag: ruby, rails, mvc, active record, migrations, routing

Livello: intermedio

TL;DR: Sintesi dei concetti core di Ruby on Rails (MVC, routing, ORM Active Record) e snippet comuni per colloqui.

Concetti chiave

Architettura MVC: Model (logica e DB con Active Record), View (UI con ERB/HTML), Controller (gestisce richieste HTTP, lega Model e View).

Active Record: L'ORM (Object-Relational Mapping) di Rails. Mappa le classi ai tavoli del DB e le istanze alle righe.

Convention over Configuration (CoC): Rails prende decisioni sensate di default (es. nomi dei DB, routing) per minimizzare la configurazione manuale.

Don't Repeat Yourself (DRY): Principio per evitare la duplicazione del codice.

Migrations: Script Ruby per alterare lo schema del database nel tempo (creazione tabelle, aggiunta colonne).

Routing: Mappa gli URL (es. GET /users) alle azioni dei controller (UsersController#index).

Ruby on Rails — Cheat Sheet

Tag: ruby, rails, mvc, activerecord, backend, framework

Livello: intermedio

TL;DR: Framework web full-stack scritto in Ruby, basato sul pattern MVC e sul principio "Convention over Configuration" per massimizzare la produttività.

Concetti chiave

Pattern MVC: separazione netta tra Model (dati e logica di business), View (presentazione) e Controller (gestione delle richieste).

Convention over Configuration: nomi di classi, file e tabelle seguono convenzioni standard per evitare complessi file di configurazione.

ActiveRecord: ORM nativo che mappa le classi Ruby sulle tabelle del database relazionale.

RESTful Routing: mappatura automatica degli URL e dei verbi HTTP sulle azioni standard del controller (index, show, new, create, edit, update, destroy).

Migrazioni: script in Ruby per gestire e versionare le modifiche allo schema del database in modo incrementale.

Strong Parameters: meccanismo di sicurezza nel controller per filtrare e consentire solo gli attributi desiderati in input.

ActiveJob: framework unificato per la dichiarazione e l'esecuzione di task in background (spesso accoppiato a Sidekiq o Resque).

Asset Pipeline: sistema integrato per minimizzare, comprimere e servire file CSS, JavaScript e immagini.

Domande tipiche e risposte pronte

Q: Come previeni o risolvi il problema delle query N+1 in ActiveRecord?R: Utilizzo il metodo includes (o eager_load, preload) nella query iniziale per caricare le associazioni in memoria con una o due query ottimizzate, evitando un caricamento pigro nel loop.

Q: Qual è la differenza tra render e redirect_to in un controller?R: render costruisce e restituisce direttamente la vista html riutilizzando le variabili di istanza dell'azione corrente. redirect_to invia una risposta HTTP 302 al browser, forzandolo a fare una nuova e distinta richiesta.

Q: Come si gestisce l'iniezione di dipendenze o la logica complessa che non appartiene al Model?R: Preferisco estrarre la logica in Plain Old Ruby Objects (PORO) come Service Objects, Form Objects o Decorator, per mantenere i model snelli (evitando il pattern "Fat Model").

Insidie e errori comuni

Dimenticarsi di configurare gli Strong Parameters, rischiando vulnerabilità di Mass Assignment.

Inserire logica di business o query complesse al database direttamente nei file di vista .erb.

Abuso dei callback di ActiveRecord (es. after_save), che possono creare effetti collaterali inaspettati difficili da testare.

Utilizzare destroy_all su grandi moli di dati invece di delete_all, scatenando iterazioni lente e rallentamenti per i callback di ogni singolo record.

Snippet e comandi

# Esempio di Model con associazione, validazione e scope
class Article < ApplicationRecord
  belongs_to :user
  has_many :comments, dependent: :destroy

  validates :title, presence: true, length: { minimum: 5 }

  scope :published_recently, -> { where(published: true).where('created_at > ?', 1.week.ago) }
end

Bash

# Comandi CLI essenziali
rails new my_app -d postgresql
rails generate model User name:string email:string
rails db:create db:migrate
rails console
rails server

Da ripassare

[ ] Ordine esatto di esecuzione dei callback di ActiveRecord.

[x] Configurazione del routing per le risorse annidate (nested resources).

Riferimenti

Ruby on Rails Guides

ActiveRecord Query Interface API

Jarvis Interviews
Jarvis