Монгоидные ссылки_ множество различных массивов идентификаторов - PullRequest
1 голос
/ 02 декабря 2010

У меня есть вопрос относительно хранения mongoid id для reference_many.

Предположим, у меня есть следующие классы:

class A
  include Mongoid::Document
  field :name

  attr_accessible :name, :b_ids
  references_many :bs, :stored_as :array, :inverse_of :a
end

class B
  include Mongoid::Document
  field :name

  attr_accessible :name, :a_id
  referenced_in :a
end

Если я сделаю следующее:

a = A.create(:name => "a1")
b = B.create(:name => "b1")
b.a = a

Стоит ли ожидать, что массив a.b_ids будет массивом, содержащим идентификатор b?

Поведение, которое я наблюдаю, состоит в том, что b.a_id содержит идентификатор a, но a.b_ids не содержит идентификатор b.

Предполагается, что массив id на стороне A должен обновляться вручную?

Кстати, если я сделаю a.bs << b, то a.b_ids будет обновлен правильно. </p>

1 Ответ

1 голос
/ 03 декабря 2010

Чтобы ответить на мой собственный вопрос, в настоящее время массивы идентификаторов не устанавливаются автоматически.Эту функцию планируется включить после выпуска ветки рефакторинга mongoid.

Эта информация поступает из этой ветки: http://groups.google.com/group/mongoid/browse_thread/thread/9ac74dc9a08a5fe2/d3a7c2404b67abfa

До этого идентификаторы должны отслеживаться вручную.

Примером может быть:

class A
  include Mongoid::Document
  field :name

  attr_accessible :name, :b_ids
  references_many :bs, :stored_as :array, :inverse_of :a

  def add_b b
    bs << b
    self.save
  end

  def remove_b b
    b_ids.delete b.id
    b.save
  end
end

class B
  include Mongoid::Document
  field :name

  attr_accessible :name, :a_id
  referenced_in :a
end

a = A.create(:name => "a1")
b = B.create(:name => "b1")
b.a = a
a.add_b b
...