5

ふぅ - たくさんのプロジェクトがこれにまとめられました。私はいくつかの (大規模な) 検索を行っても役に立ちませんでした。

ActiveAdmin の Mongoid 対応フォークを使用して、Rails 3 アプリの管理インターフェイスを構築しています。

ActiveAdmin (Formtastic を使用してフォームを構築する) は、これまでのところ順調に進んでいるようです。しかし、このスタックを Mongoidembeds_manyembedded_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」として送信しようとしています。

とにかく、私の直感は、ここで四角いペグを丸い穴に合わせようとしているということですが、他の誰かが何か考えを持っているなら、彼らは大歓迎です.

4

1 に答える 1

-1

エラーはそれをすべて言いました。最初に親を作成しないと、埋め込みレコードを作成できません。

はい、あなたの場合、has_many と belongs_to の関係が正しい選択になると思います。

于 2013-10-08T13:08:47.373 に答える