4.3 - Active Record come ORM

Vedi tutte le pagine e le modifiche recenti o scarica i sorgenti nella pagina


Prima di continuare con il nostro modello Team è necessario introdurre il concetto di ORM. Come tutti sanno, i dati su database sono organizzati in una struttura relazionale che permette di eseguire ricerche nel minor tempo possibile e realizzare strutture molto complesse anche con poco progettazione del database. Dal lato opposto però, l’architettura dei linguaggi di programmazione è sviluppata ad oggetti. A questo proposito negli ultimi anni hanno preso piede delle applicazioni particolari che permettessero di “relazionare” queste due logiche organizzative differenti. Utilizzando questi ORM il programmatore, una volta realizzato il database, non dovrà piu preoccuparsi della struttura relazionale e potrà concentrarsi specificatamente sugli oggetti (struttura di dati oggettivamente più vicina modo di pensare umano).

ActiveRecord poteva escludere una funzionalità così importante? Certamente no!

In questa sezione vedremo quali sono le caratteristiche di base di questo aspetto di Rails analizzando, in logica Convention over Configuration, quali sono le impostazioni che il framework utilizza di default e che permettono uno sviluppo agile e rapido, non tralasciando però eventuali configurazioni alternative che spesso sono necessarie (soprattutto quando si lavora su database già esistenti).

Come tutti gli ORM presenti, anche ActiveRecord segue la convenzione columns as properties, quindi per ogni colonna della tabella associata al modello corrisponderà una proprietà dell’oggetto. La differenza di Rails rispetto ai concorrenti sta nel fatto che per la definizione delle proprietà primarie (quindi niente relazioni) non è necessario scrivere nessuna configurazione: sarà il framework che analizzando la tabella del database aggiungerà in automatico i metodi per accedere e modificare le proprietà. Per questo motivo il primo passo dopo aver creato il nostro modello è quello di creare la struttura della tabella. Ritornando al nostro modello team la tabella potrebbe essere:

CREATE TABLE `teams` (
  `id` INTEGER  NOT NULL,
  `name` VARCHAR  NOT NULL,
  `balance` DOUBLE  NOT NULL,
  `owner` VARCHAR  NOT NULL,
  PRIMARY KEY(`id`)
)

Il nome della tabella è teams (ovvero il nome del modello pluralizzato): questo perchè Rails di default associa il modello alla relativa tabella semplicemente pluralizzando e rendendo minuscolo il suo nome. Nel caso la tabella abbia un nome diverso si può sempre utilizzare il metodo set_table_name esteso da ActiveRecord::Base (API).

Grazie a Rails sarà infatti possibile eseguire questo codice senza aver definito praticamente nulla nel nostro modello:

t = Team.new
t.name = "Milan" 
t.balance = 99999
t.owner = "Silvio Berlusconi" 

Sarà ActiveRecord che adatterà gli oggetti Ruby (String, FixNum, Date, ...) rispetto alle tipologia di colonna previste dal nostro DBMS.

Ovviamente i nostri modelli non saranno tutti cosi semplici ma saranno relazionati tra di loro. In questo caso ovviamente Rails non può comprenderlo in maniera automatica: cè bisogno infatti di dire al framework che tipo di relazione esiste tra i modelli.

Guida RoR

4.2 – Creazione di un modello

4.4 – Salvataggio di un nuovo record

Updated on June 26, 2007 22:27 by Alberto Bottarini (82.48.99.249)