19
inverse_of
在mongoid协会中的含义是什么?没有它,我可以通过使用它而不是仅仅通过关联来获得什么?什么是inverse_of在mongoid中的含义?
inverse_of
在mongoid协会中的含义是什么?没有它,我可以通过使用它而不是仅仅通过关联来获得什么?什么是inverse_of在mongoid中的含义?
在一个简单的关系中,两个模型只能以单一方式关联,并且关系的名称自动成为与其相关的模型的名称。在大多数情况下这很好,但并不总是足够的。
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文档以获取更多详细信息。
所以,如果只有一个与自定义名称的关系,我不需要''''的反函数,但我需要在与自定义名称有两个关系的情况下?我现在在ActiveRecord'''inverse_of'''上做了不同的事情。 – freemanoid 2013-05-31 15:29:15
是的,对于具有自定义名称的单个关系,只需要使用'class_name'(在Active Record和Mongoid中)。如果'users'和'requests'有不止一种关系,'inverse_of'是Mongoid(和Active Record)知道你指的是哪一种方法。 – XanderStrike 2013-05-31 16:25:19