Mongoid has_and_belongs_to_many inverse_of :: nil意外数据

时间:2013-08-02 00:55:45

标签: ruby-on-rails mongoid

我有一系列与自己有关的任务

class Task
  include Mongoid::Document
  has_and_belongs_to_many :related_tasks , class_name: 'Task', inverse_of: :nil

我正在寻找的monogo数据 父任务

{
"_id" : ObjectId(""),
"related_task_ids" : [
    ObjectId(""),
    ObjectId("")
],
}

关于儿童任务(没有)

父任务看起来正确。 但是对于孩子的任务,我得到了

{
"_id" : ObjectId(""),
"nil_ids" : [
    ObjectId("")
],
"related_task_ids" : [ ],
}

nil_ids是父ID。

为什么要存储nil_id?有没有办法阻止这个?

我想要一个1..n的关系,即任务有很多孩子。

这不是一个n..n关系,即儿童任务没有很多父任务。

1 个答案:

答案 0 :(得分:2)

您在关联的子级端看到nil_ids键的原因是您指定了:nil Ruby符号而不是nil。所以Mongoid就像其他任何符号一样解释这个,并在nils上创建一个Task集合作为related_tasks集合的反面。

尝试:

has_and_belongs_to_many :related_tasks , class_name: 'Task', inverse_of: nil

这应该将related_task_ids保留在父任务中,但不会将nil_ids存储在子项上。