Mongoid документы в пространствах имен - PullRequest
2 голосов
/ 10 мая 2011

Как мне работать с 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 содержит _id группы g, но когда я выполняю:

g.destroy

Он жалуется на отсутствующий метод под названием 'A / B / groups_ids' вclass 'User'.
Он пытается удалить ссылку на g внутри u, но не может найти правильное пространство имен ...

Если я удаляю пространства имен A и B и параметры: class_nameвсе работает нормально.
Как правильно (если есть) обрабатывать пространства имен в этом сценарии?

1 Ответ

4 голосов
/ 12 мая 2011

решение состоит в том, чтобы добавить: 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
...