2012-04-02 8 views
0

Ich versuche, mehrere Klassen einzurichten, die auf eine Klasse verweisen, und sie müssen nur in einer Richtung sein.Warum kann ich eine 1: N- und eine 1: 1-Einwegreferenz zu einer Klasse in Mongoid nicht multiplizieren?

Ich habe diese Klassen:

class Widget 
    include Mongoid::Document 

    ... 

class Template 
    include Mongoid::Document 

    has_and_belongs_to_many :widgets, inverse_of: nil 
    ... 


class EntryText 
    include Mongoid::Document 

    has_one :widget, inverse_of: nil 
    ... 

Wenn ich versuche, so etwas wie:

EntryText.new.widget = Widget.first 

bekomme ich diesen Fehler:

undefined method `=' for #<Widget: 

Ich bin in der Lage Eintrag Text ändern müssen diese Bezugnahme auf Widget:

has_and_belongs_to_many :widgets, inverse_of: nil 

Aber da es nur ein Widget hat, ist dies eine Art hässlicher Workaround.

Antwort

1

Anstelle von has_one :widget sollten Sie belogs_to :widget, inverse_of: nil verwenden. Mongoid (auch aktive Aufzeichnung) speichert ID auf der belongs_to Seite. Wenn also die Beziehung nur auf einer Seite beibehalten werden soll, muss sie belongs_to sein, andernfalls können wir die Assoziation, die wir zu speichern versuchten, nicht von db zurückbekommen.

Verwandte Themen