【问题标题】:Aliasing a referenced relationship field in Mongoid在 Mongoid 中为引用的关系字段起别名
【发布时间】:2013-02-01 22:25:06
【问题描述】:

在下面的 Mongoid 模型中,belongs_to 关系字段如何取别名?

class Contact
  field :nm, :as => :name, :type => String # field aliasing
  embeds_one :address, :store_as => :ad  # embedded document aliasing
  belongs_to :account # referenced relation doesn't support store_as
end

我想将帐户 ID 存储在名为 ac 而不是 account_id 的字段中。

【问题讨论】:

    标签: ruby-on-rails-3 mongoid


    【解决方案1】:

    您可以使用 :foreign_key 指定 mongodb 字段名称。

    belongs_to :account, foreign_key: :ac
    

    但是,如果要使用account_id,则需要声明其别名:

    alias :account_id :ac
    

    或在 belongs_to 之前定义 account_id:

    field :account_id, as: :ac
    

    【讨论】:

    • 关系两边都需要设置foreign_key。
    【解决方案2】:

    Mongoid 允许通过使用 'inverse_of' 为关系使用任意名称

    如果不需要逆向,例如belongs_to 或has_and_belongs_to_many,请确保在 关系。如果需要倒数,则很可能无法使用倒数 从关系的名称中找出,你需要 明确告诉 Mongoid 关系上的逆是什么。

    所以,要使用 'ac' 作为别名,必须添加 inverse_of:

    class Contact
      field :nm, :as => :name, :type => String # field aliasing
      embeds_one :address, :store_as => :ad  # embedded document aliasing
      belongs_to :ac, class_name: 'Account', inverse_of: :contact
    end
    
    class Account
      has_one :contact, class_name: 'Contact', inverse_of: :ac
    end
    

    【讨论】:

    • 这并不能解决我的问题。我想将 Account 字段称为account 而不是ac,因此需要别名功能。
    • 您想同时通过 conact.ac 和 contact.account 寻址吗?请解释一下。
    • Mongoid 库提供了别名字段名称的功能。当您处理大型集合时,这非常有用。本质上,如果您查看我的问题中的第一个场景,我将名称存储为集合中的nm,但访问/查询它为name。此功能适用于常规字段和嵌入式关联。对于引用的关联,没有记录的方法来设置此选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多