我的形式有一些ajax。它允许用户将现有服务添加到联系人(联系人有许多服务)。由于服务已经存在,使用ajax,当用户将服务链接到联系人时,我在隐藏的输入字段中添加id:
<input type="hidden" name="contact[services_attributes][1][id]" value="57181ccc6d6163b71d030000">
以上将引发异常:
找不到包含id(s)的类服务的文档 57181ccc6d6163b71d030000
我需要在提交表单时自己创建关系。如果这是ActiveRecord,我可以执行以下操作:
class Contact < ActiveRecord::Base
def services_attributes=(params)
service = Service.find(params[:id])
self.services << service if service
end
end
不幸的是,我尝试将其中一个* _attributes = writers添加到Contact,它使用Mongoid。它被忽略了。 Mongoid还有另一种方法吗?
答案 0 :(得分:0)
目前还不清楚发生了什么。最好提供比您认为必要的更多信息以获得最佳答案。
假设您有联系人文件:
class Contact
include Mongoid::Document
field :name, type: String
has_many :services
end
和服务文件
class Service
include Mongoid::Document
field :price, type: Float
belongs_to :contact
end
您可以将其中一个连接到另一个:
service = Service.create(price: 50.00)
contact = Contact.create(name:'alex')
contact.services << service
p contact.services.first.price
=> 50.00
在你的例子中,你将把_id作为一个字符串传递,这也很好。
service_id = Service._id.to_s
found_service = Service.find(service_id)
contact.services << found_service
p contact.services.first.price
=> 50.00
现在,如果你想要一个双向关系,你需要使用has_and_belongs_to_many,但你没有说明这是必需的。
因此,假设上述所有内容都是您所知道的内容,最简单的答案是您的服务中没有文档(mongoid在mongodb中创建名称时会将其命名),其id与匹配的内容相同。您可以打开pry,irb或mongo客户端并查看。