【问题标题】:What inverse_of does mean in mongoid?mongoid 中的 inverse_of 是什么意思?
【发布时间】:2013-02-20 22:20:48
【问题描述】:

inverse_of 在 mongoid 关联中是什么意思?使用它而不是没有它的关联,我能得到什么?

【问题讨论】:

    标签: ruby-on-rails associations mongoid relationship


    【解决方案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 中)。如果usersrequests 以不止一种方式相关,inverse_of 是 Mongoid(和 Active Record)可以知道您指的是哪一个的唯一方式。
    猜你喜欢
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2017-06-11
    • 2018-03-05
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多