Mongoid:如何反转1-N关系,并将外键存储在父级?

时间:2013-04-21 18:19:06

标签: ruby-on-rails mongodb mongoid

我正在创建描述某人的个人资料。本说明书中包含有关其工作行业的信息(即“Computers& IT”)。因此,定义关系:

"A Profile has an Industry, but an Industry does not belong to a Profile."

通过this Mongoid documentation查看,我使用以下内容设置模型:

class Profile
  include Mongoid::Document

  has_one :industry
end

class Industry
  include Mongoid::Document

  field :name,      type: String, default: ''
end

现在我知道您通常会在行业类中添加belongs_to :profile。但是,根据文档,它将外键添加到子(行业),而不是父(配置文件):

# The parent profile document.
{ "_id" : ObjectId("4d3ed089fb60ab534684b7e9") }

# The child industry document.
{
  "_id" : ObjectId("4d3ed089fb60ab534684b7f1"),
  "profile_id" : ObjectId("4d3ed089fb60ab534684b7e9")
}

这是有问题的,因为我不希望行业链接到个人资料,我希望个人资料链接到行业。 如何让它看起来像这样?

# The parent profile document.
{ "_id" : ObjectId("4d3ed089fb60ab534684b7e9")
  "industry_id" : ObjectId("4d3ed089fb60ab534684b7f1")
}

# The child industry document.
{
  "_id" : ObjectId("4d3ed089fb60ab534684b7f1"),
}

1 个答案:

答案 0 :(得分:0)

我发现Mongoid中关系的名称选择令人困惑,但它反映了ActiveRecord,所以你去了。你想要:

class Industry 
    has_many :profiles 
end

class Profile 
    belongs_to :industry
end

belongs_to的班级有FK字段。 has_onehas_many创建关联以在另一个类中查找FK。