ruby - 命名空间内的 Mongoid 文档

标签 ruby mongodb namespaces mongoid

如何处理命名空间内的 mongoid 文档?
我有两个 mongoid 文档如下:

module A
module B

Class User
 include Mongoid::Document
 field :name, type: String
 has_and_belongs_to_many :groups, :cascade => :nullify, :class_name => 'A::B::Group'
end

Class Group
 include Mongoid::Document
 field :name, type: String
 has_and_belongs_to_many :users, :cascade => :nullify, :class_name => 'A::B::User'
end

end
end

当我尝试删除包含用户的组时出现问题:

u = User.create()
g = Group.create()
g.users << u

此时u.groups_ids包含了组g的_id,但是当我执行时:

g.destroy

它提示“User”类中缺少名为“A/B/groups_ids”的方法。
它试图删除 u 中 g 的引用,但无法找到正确的命名空间...

如果我删除命名空间 A 和 B 以及 :class_name 选项,一切都会正常。
在这种情况下,哪种处理命名空间的正确方法(如果有)?

最佳答案

解决方案是添加一个 :foreign_key => 'A/B/groups_ids':

Class User
 include Mongoid::Document
 field :name, type: String
 has_and_belongs_to_many :groups, :cascade => :nullify, :class_name => 'A::B::Group', :foreign_key => 'A/B/group_ids'
end

Class Group
 include Mongoid::Document
 field :name, type: String
 has_and_belongs_to_many :users, :cascade => :nullify, :class_name => 'A::B::User', :foreign_key => 'A/B/user_ids'
end

关于ruby - 命名空间内的 Mongoid 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5942079/

相关文章:

spring - 如何使用 spring data mongodb 聚合框架在组操作中使用 Criteria.ne?

java - 尽管有 @ElementCollection,hibernate (MongoDB) 仍会为字符串列表抛出 InloggingException

c# - 为什么在 C# 中添加命名空间别名可以消除歧义?

JavaScript 闭包和名称破坏

arrays - 如何将空白元素添加到数组的索引[0]

ruby-on-rails - Ruby on Rails - 缓存变量

ruby - 为什么 puts File.expand_path(File.dirname(File.dirname(__FILE__))) 给我不同的结果?

mongodb - 模式验证中所需的 Mongoose 数组不起作用

php - 如何使用 Symfony 表达式语言在 @Security 注释中使用类常量?

ruby-on-rails - 如何摆脱 let using before