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.
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).
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à.
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.
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").
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.
# 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
[ ] Ordine esatto di esecuzione dei callback di ActiveRecord.
[x] Configurazione del routing per le risorse annidate (nested resources).
Ruby on Rails Guides
ActiveRecord Query Interface API