2013-09-25 10 views
7

RailsGuides dice:È possibile utilizzare l'associazione has_one quando il modello ha istanze di uno o zero di un altro modello?

http://guides.rubyonrails.org/association_basics.html A has_many "associazione indica che ogni istanza del modello ha zero o più istanze di un altro modello."

"Un'associazione has_one imposta anche una connessione one-to-one con un altro modello, ma con semantica (e conseguenze un po 'diverse) .Questa associazione indica che ogni istanza di un modello contiene o possiede un'istanza di un altro modello. "

Ciò significa che se si desidera impostare un'associazione che ogni istanza del modello ha zero o un'istanza di un altro modello, il modo migliore è utilizzare has_many e not has_one? Quali saranno i problemi che incontrerò se utilizzo has_one?

Grazie.

risposta

13

has_one è corretto - il rapporto che è configurato non è obbligatorio a meno che non aggiungere il proprio validations ad esso.

Per rendere un po 'più chiaro -

class Post < ActiveRecord::Base 
    has_one :author 

end 

class Author < ActiveRecord::Base 
    belongs_to :post 

end 

Senza convalide, un dato post può avere un autore (ma non più di uno) - tuttavia un autore non è necessario.

2

A meno che non si definiscano convalide specifiche, has_one impedisce semplicemente di avere più di un oggetto associato al modello. Lo zero è ok.

Problemi correlati