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

fre*_*oid 22 ruby-on-rails associations relationship mongoid

inverse_of在mongoid协会中意味着什么?如果没有它,我可以通过使用它而不仅仅是关联来获得什么?

Xan*_*ike 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
Run Code Online (Sandbox Code Playgroud)

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

  • 所以如果只有一个与自定义名称的关系,我就不需要````````````````````````` 我现在在ActiveRecord中```inverse_of```做了不同的事情. (2认同)
  • 是的,对于具有自定义名称的单个关系,您只需要使用`class_name`(在Active Record和Mongoid中).如果`users`和`requests`以多种方式相关,那么`inverse_of`是Mongoid(和Active Record)可以知道你指的是哪一种的唯一方式. (2认同)