Nel definire la relazione uno a molti con has_many
e belongs_to
, è possibile specificare differenti opzioni che modificano il comportamento della relazione. Vediamo quali sono le opzioni più utilizzate.
Opzioni per has_many
Con l'opzione :order è possibile specificare l'ordine con cui gli oggetti associati sono estratti; ad esempio:
has_many :bookmarks, :order => "title"
ordinerà tutti i bookmark abbinati ad una categoria per titolo.
Con l'opzione :dependent è possibile specificare come trattare gli oggetti associati ad un oggetto che viene cancellato dal database. Specificando:
has_many :bookmarks, :dependent => "destroy"
nel modello Category
, quando si cancella una categoria vengono cancellati anche tutti i bookmark collegati, mentre specificando
has_many :bookmarks, :dependent => "nullify"
tutti i bookmark abbinati ad una categoria che viene cancellata avranno la chiave esterna category_id
impostata a valore nullo.
Con l'opzione :select è possibile specificare quali campi degli oggetti associati devono essere estratti; ad esempio per estrarre solo il titolo dei bookmark associati ad una categoria possiamo utilizzare:
has_many :bookmarks, :select => "title"
Con l'opzione :conditions è possibile specificare le condizioni che gli oggetti associati devono rispettare per essere presi in considerazione; ad esempio
has_many :bookmarks, :conditions => {:published => true}
Opzioni per belongs_to
Con l'opzione :foreign_key è possibile specificare una chiave esterna da utilizzare per la relazione differente da quella utilizzata per convezione; è possibile indicare uno qualsiasi degli attrivuti disponibili per il modello. Le opzioni :conditions e :select si comportano come specificato per has_many
.