gpt4 book ai didi

ruby-on-rails - 在 Rails 中,使用 Mongoid,如何找到具有有效(非零)has_one 引用的所有模型?

转载 作者:行者123 更新时间:2023-12-04 06:11:34 26 4
gpt4 key购买 nike

所以我有两个这样的模型

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

假设我在 rails 控制台中有一个名为 mp 的 ModelParent 持久化实例
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 显然在父级中,但是对not 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

最佳答案

它不起作用,因为外键存储在关系的所属方。所以,在你的情况下 ModelChild集合将有一个字段 model_parent_id而不是相反。我猜你已经想通了,但我建议你不要用你的方式解决它,而是建议你切换 has_onebelongs_to关联,然后使用:

 ModelParent.where(:model_child_id.ne => nil)

关于ruby-on-rails - 在 Rails 中,使用 Mongoid,如何找到具有有效(非零)has_one 引用的所有模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10067139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com