mongoid, создание ссылок с ролями - PullRequest
2 голосов
/ 20 января 2011

Я новичок в mongoDB и просто использую его для нового проекта rails, над которым я работаю. Теперь я хотел, чтобы (встроенный) документ ссылался на другую коллекцию, но с другими ролями.

Каким-то образом это не работает. Я знаю, что не могу определить отношение из внешней коллекции к моей встроенной. Так что в моем случае я не могу получить доступ к локациям от моего пользователя, и я в порядке с этим. Тем не менее, мне нужно определить часть referenced_in :location, потому что в противном случае я получаю сообщение об ошибке undefined method 'name' for nil:NilClass, когда пытаюсь добавить новое место в место.

Так что это просто предисловие. Моя настоящая проблема заключается в том, что эти роли не работают. Когда я создаю новое местоположение, подобное этому, в месте locations.create(:user_a => some_user), этому пользователю также присваивается user_b.

Есть ли способ заставить это работать? Или я что-то не так делаю?

class Place
  include Mongoid::Document
  embeds_many :locations
end

class Location
  include Mongoid::Document
  embedded_in :place, :inverse_of => :locations
  references_one :user_a, :class_name => "User" #, :stored_as => :array
  references_one :user_b, :class_name => "User" #, :stored_as => :array
end

class User
  include Mongoid::Document
  referenced_in :location, :inverse_of => :dropper
  referenced_in :location, :inverse_of => :picker
end

1 Ответ

1 голос
/ 20 января 2011

Я думаю, вы должны устранить неоднозначность двух ассоциаций местоположения (поскольку ссылка хранится на стороне referenced_in):

class User
  include Mongoid::Document
  referenced_in :location_a, :inverse_of => :user_a, :class_name => "Location"
  referenced_in :location_b, :inverse_of => :user_b, :class_name => "Location"
end

Я не могу не чувствовать, что может быть лучший способ сделать это, хотя ...

Это лучший подход?

class Location
  include Mongoid::Document
  embedded_in :place, :inverse_of => :locations
  referenced_in :user_a, :class_name => "User"
  referenced_in :user_b, :class_name => "User"
end

class User
  include Mongoid::Document
end
...