В Rails, используя Mongoid, как мне найти все модели с действительной (не нулевой) ссылкой has_one?

Итак, у меня есть две подобные модели

class ModelParent
  include Mongoid::Document
  field :name, :type => String
  has_one :model_child
end

class ModelChild
  include Mongoid::Document
  field :name, :type => String
  belongs_to :model_parent
end

Предполагая, что у меня есть постоянный экземпляр ModelParent с именем mp в консоли rails

mc = mp.create_model_child(:name=>"child")

, а затем выполните

mp.model_child

он возвращает действительный объект

однако, если я ищу его следующим образом:

ModelParent.where(:model_child.ne => nil).length

он возвращает 0

Я пытался создать model_child, а затем назначить его, также используя build_model_child(), и каждый метод показывает model_child явно находится в родительском элементе, однако запрос не nil (.ne) не может найти все ModelParents с дочерними элементами.

Что я делаю не так?

Обновление:

Отвечаю на свой вопрос. Однако я до сих пор не уверен, почему :model_child.ne => nil не работает...

Я решил проблему, закодировав что-то вроде этого:

  def self.with_child
    user_ids = ModelChild.all.only(:model_parent_id).map(&:model_parent_id)
    return ModelParent.where(:_id.in => user_ids).all
  end
8
задан KDKotU 9 April 2012 в 00:45
поделиться