ふぅ - たくさんのプロジェクトがこれにまとめられました。私はいくつかの (大規模な) 検索を行っても役に立ちませんでした。
ActiveAdmin の Mongoid 対応フォークを使用して、Rails 3 アプリの管理インターフェイスを構築しています。
ActiveAdmin (Formtastic を使用してフォームを構築する) は、これまでのところ順調に進んでいるようです。しかし、このスタックを Mongoidembeds_many
とembedded_in
リレーションで使用しようとすると、思わぬ障害に遭遇しました。私は善良な市民であり、Mongo で適切なデータ モデリング手法を使用しようとしていますが、Formtastic は協力したくないようです。
難解かもしれませんが、私が得た特定のエラーを共有します。
has_many
良い解決策を見つけられない場合は、MongoDB の主な利点を放棄することになるとわかっていても、思い切ってandだけを使用しbelongs_to
ます (アプリは不足するほど大きくはなりません)。結合/複数のクエリの数が問題になる可能性がありますが、最初から正しい方法で行うと考えました!)。
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
それはラインで窒息し、f.input :location
投げています:
ActionView::Template::Error (undefined method `event_id' for #<Event:0x007fa4224a20e0>):
1: insert_tag renderer_for(:new)
をに変更:as => :select
し:as => :check_boxes
、実際に正しい場所を表示するようにしました(ただし、選択やラジオではなく、チェックボックスとして)。しかし、フォームを送信すると、次のメッセージが表示されます。
Mongoid::Errors::NoParent (
Problem:
Cannot persist embedded document Event without a parent document.
)
生の送信を見ると、選択内容を親ドキュメント (場所) の ID ではなく「event_id」として送信しようとしています。
とにかく、私の直感は、ここで四角いペグを丸い穴に合わせようとしているということですが、他の誰かが何か考えを持っているなら、彼らは大歓迎です.