什么inverse_of在mongoid中意味着什么?

时间:2013-03-06 08:08:54

标签: ruby-on-rails associations mongoid relationship

inverse_of在mongoid关联中的含义是什么?我可以通过使用它来获得,而不仅仅是没有它的关联?

1 个答案:

答案 0 :(得分:37)

在一个简单的关系中,两个模型只能以单一方式相关,并且关系的名称自动是与其相关的模型的名称。在大多数情况下这很好,但并不总是足够。

inverse_of允许您指定您所指的关系。在您希望为关系使用自定义名称的情况下,这很有用。例如:

class User
  include Mongoid::Document
  has_many :requests, class_name: "Request", inverse_of: :requester
  has_many :assignments, class_name: "Request", inverse_of: :worker
end

class Request
  include Mongoid::Document
  belongs_to :requester, class_name: "User", inverse_of: :requests
  belongs_to :worker, class_name: "User", inverse_of: :assignments
end

在此示例中,用户可以请求并分配给故障单。为了表示这两个不同的关系,我们需要为同一个模型定义两个关系,但名称不同。使用inverse_of让Mongoid知道"请求"请求"请求者"和"作业"跟"工人一起去。"这里的优点是双重的,我们可以为我们的关系使用有意义的名称,并且我们可以有多种方式相关的两个模型。有关更多详细信息,请查看Mongoid Relations文档。