Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Relazione uno a uno

Come implementare una relazione uno a uno fra due modelli Active Record
Come implementare una relazione uno a uno fra due modelli Active Record
Link copiato negli appunti

Supponiamo di avere un modello Page che ha il solo attributo content che memorizza il sorgente HTML di una certa pagina Web, e di voler mettere in relazione ogni istanza del modello Bookmark con una istanza di questo modello così da poter abbinare a ciascun bookmark il contenuto della relativa pagina.

Per specificare la relazione uno a uno fra il modello Bookmark e il modello Page procediamo prima a creare una nuova colonna dal nome bookmark_id nella tabella pages con una migrazione dedicata, e quindi modifichiamo i modelli come segue:

class Bookmark < ActiveRecord::Base
  has_one :page
  # validazioni
  #...
end

class Page < ActiveRecord::Base
  belongs_to :bookmarks
  # validazioni
  #...
end

has_one e belongs_to rivestono in questo caso un ruolo molto simile, poiché entrambe le istruzioni specificano una relazione uno a uno fra il modello di partenza e quello referenziato. Prendiamo come regola che belongs_to deve essere posto nel modello che contiene la chiave esterna, e in questo caso Page.

Le variabili @bookmark e @page contenengono rispettivamente un'istanza del modello Bookmark ed una del modello Page, possiamo utilizzare quindi le operazioni:

Operazione Descrizione
@bookmark.page = @page
o
@page.bookmark = @bookmark
per mettere in relaziona uno a uno le due istanze
@bookmark.page = nil per annullare la relazione
@bookmark.page.nil? restituisce true se non è presente alcuna relazione, false altrimenti

Le opzioni per le relazioni uno a uno sono del tutto simili a quelle descritte in precedenza per la relazione uno a molti; di fatto la relazione uno a uno si comporta in modo molto simile alla relazione molti a molti a meno della cardinalità dell'associazione.


Ti consigliamo anche