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.