mongoid 中的 inverse_of 是啥意思?
Posted
技术标签:
【中文标题】mongoid 中的 inverse_of 是啥意思?【英文标题】:What inverse_of does mean in mongoid?mongoid 中的 inverse_of 是什么意思? 【发布时间】:2013-02-20 22:20:48 【问题描述】:inverse_of
在 mongoid 关联中是什么意思?使用它而不是没有它的关联,我能得到什么?
【问题讨论】:
【参考方案1】:在一个简单的关系中,两个模型只能以一种方式关联,并且关系的名称自动是它所关联的模型的名称。在大多数情况下这很好,但还不够。
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 知道“requests”与“requester”一起使用,“assignments”与“worker”一起使用。这里的优势是双重的,我们可以为我们的关系使用有意义的名称,并且我们可以让两个模型以多种方式关联。查看Mongoid Relations 文档了解更多详细信息。
【讨论】:
所以我不需要inverse of
如果只有一个与自定义名称的关系但我需要两个与自定义名称的关系?我现在在 ActiveRecord inverse_of
中做不同的事情。
是的,对于具有自定义名称的单个关系,您只需要使用class_name
(在 Active Record 和 Mongoid 中)。如果users
和requests
以不止一种方式相关,inverse_of
是 Mongoid(和 Active Record)可以知道您指的是哪一个的唯一方式。以上是关于mongoid 中的 inverse_of 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
the hash for the file is not present in the specified catalog file,是啥意
带有 ActiveRecord 的 rails 3 中的 inverse_of 有啥限制