2012-11-21 12 views
5

Whew - wiele projektów zawiniętych w ten jeden i zrobiłem kilka (rozległe) wyszukiwanie bez skutku, więc rzucając flarę, czy ktoś jeszcze pracuje z podobnym stosem i ma rozwiązanie.Mongoid embeds_many/embedded_in powiązań z Formtastic w ActiveAdmin ...?

Używam Mongoid-enabled fork of ActiveAdmin do zbudowania interfejsu administratora dla aplikacji Rails 3.

ActiveAdmin (który buduje swoje formularze za pomocą Formtastic) wydaje się grać do tej pory. Ale natknąłem się na próbę użycia tego stosu z relacjami Mongoida: embeds_many i embedded_in. Staram się być dobrym obywatelem i korzystać z odpowiedniej techniki modelowania danych w Mongo, ale Formtastic nie chce grać razem.

Podzielę się konkretnym błędem, który otrzymuję, choć może to być ezoteryczne.

Jeśli nie uda mi się wykopać dobrego rozwiązania, zasysam je i użyję tylko has_many i belongs_to, chociaż wiem, że odrzucę główną zaletę MongoDB (aplikacja nie będzie wystarczająco duży, aby mieć brak złączeń/pytań wielokrotnych, ale pomyślałem, że będę robił to we właściwy sposób od samego początku!).

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 

To dławiąc na linii f.input :location i rzucania:

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

Zmieniłem :as => :select do :as => :check_boxes i rzeczywiście dostał go do wyświetlania odpowiednich miejscach (choć jako wyboru, a nie wybranych lub radiowych). Ale po wysłaniu formularza, mam potem witany z:

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

W patrząc na surowego składania, że ​​próbuje wysłać mój wybór jako „event_id” zamiast identyfikatora dokumentu macierzystego (lokalizacja).

W każdym razie - moim jedzeniem jest to, że próbuję dopasować kwadratowy kołek do okrągłej dziury tutaj, ale jeśli ktokolwiek inny ma jakieś myśli, byliby ogromnie wdzięczni.

Odpowiedz

-1

Błąd powiedział wszystko. Nie można utworzyć rekordu osadzonego bez uprzedniego utworzenia elementu nadrzędnego.

I tak, myślę, że w twoim przypadku has_many and belongs_to relation będzie właściwym wyborem.