哇 - 很多项目都包含在这个中,而且我做了一些(广泛的)搜索无济于事,所以抛出一个耀斑,看看是否有其他人在使用类似的堆栈并且有解决方案。
我正在使用Mongoid-enabled fork of ActiveAdmin为Rails 3应用构建管理界面。
ActiveAdmin(使用Formtastic构建其表单)似乎到目前为止一直在播放。但是当我尝试使用Mongoid的embeds_many
和embedded_in
关系时,我遇到了麻烦。我正努力成为一名优秀的公民,并使用适当的数据建模技术与Mongo,但Formtastic似乎不想发挥。
我会分享我得到的具体错误,尽管它可能是深奥的。
如果我无法找到一个好的解决方案,我会吮吸它并使用has_many
和belongs_to
,即使我知道我将放弃MongoDB的主要好处(该应用程序不会大到缺少连接/多个查询是一个问题,但我想我从一开始就以正确的方式做事!)。
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.
)
在查看原始提交时,它会尝试将我的选择发送为“event_id”而不是父文档的ID(位置)。
无论如何 - 我的直觉是我试图在这里将一个方形钉子放入一个圆孔中,但如果有其他人有任何想法,他们会非常感激。
答案 0 :(得分:-1)
错误说明了一切。如果没有先创建父级,则无法创建嵌入式记录。
是的,我认为在你的情况下has_many和belongs_to关系将是正确的选择。