2012-11-21 6 views
5

Puh - viele Projekte in diesem und ich habe einige (umfangreiche) Suche vergeblich getan, so werfen einen Flare, um zu sehen, ob jemand anders mit einem ähnlichen Stapel arbeitet und eine Lösung hat.Mongoids embeds_many/embedded_in Beziehungen mit Formtastic in ActiveAdmin ...?

Ich verwende eine Mongoid-enabled fork of ActiveAdmin, um eine Admin-Schnittstelle für eine Rails 3 App zu erstellen.

ActiveAdmin (die ihre Forms mit Formtastic erstellt) scheint bis jetzt zu spielen. Aber ich bin in einen Haken geraten, als ich versuchte, diesen Stapel mit Mongods embeds_many und embedded_in Beziehungen zu verwenden. Ich versuche, ein guter Bürger zu sein und die richtige Datenmodellierung mit Mongo zu verwenden, aber Formtastic scheint nicht mitspielen zu wollen.

Ich teile den spezifischen Fehler, den ich bekomme, obwohl es esoterisch sein kann.

Wenn ich nicht eine gute Lösung ausgraben kann, werde ich es saugen und einfach has_many und belongs_to verwenden, obwohl ich weiß, dass ich den Hauptvorteil von MongoDB aufgeben werde (die App wird nicht sein groß genug, um das Fehlen von Joins/Mehrfachabfragen ein Problem zu sein, aber ich dachte, ich würde die Dinge von Anfang an richtig machen!).

class Location 
    include Mongoid::Document 
    embeds_many :events 
    field :venue_name, type: String 
end 

class Event 
    include Mongoid::Document 
    embedded_in :location 
    field :event_name, type: String 
end 

ActiveAdmin.register Event do 
    form do |f| 
    f.inputs do 
     f.input :event_name 
     f.input :location, :as => :select 
    end 
    f.buttons 
end 

Es ist auf der f.input :location Linie und Wurf Würgen:

ActionView::Template::Error (undefined method `event_id' for #<Event:0x007fa4224a20e0>): 
1: insert_tag renderer_for(:new) 

Ich habe die :as => :select-:as => :check_boxes und bekam tatsächlich die richtigen Standorte angezeigt werden (obwohl als Kontrollkästchen, kein wählen oder Radio). Aber nach dem Absenden des Formulars, bin ich dann mit einem grüßte:

Mongoid::Errors::NoParent (
    Problem: 
    Cannot persist embedded document Event without a parent document. 
) 

In an der rohen Vorlage suchen, es versucht, meine Auswahl zu senden als „event_id“ anstelle der ID des übergeordneten Dokuments (Ort).

Wie auch immer - mein Bauchgefühl ist, dass ich versuche, einen quadratischen Pflock in ein rundes Loch hier zu passen, aber wenn jemand andere Gedanken hat, würden sie sehr geschätzt werden.

Antwort

-1

Der Fehler sagte alles. Sie können keinen eingebetteten Datensatz erstellen, ohne zuerst das übergeordnete Element erstellt zu haben.

Und ja, ich denke in Ihrem Fall has_many und gehört_to Relation wird die richtige Wahl sein.

Verwandte Themen