【问题标题】:Rails/Mongoid: Can an embedded (embedded_in) document have many documents (has_many)?Rails/Mongoid:一个嵌入的(embedded_in)文档可以有很多文档(has_many)吗?
【发布时间】:2013-05-11 22:14:16
【问题描述】:

我有一个嵌入了许多 email_accounts 的用户。同时我希望 email_accounts 可以有多个 email_templates。这可能吗?当我尝试合并时,我的 Rails 应用程序拒绝接受关系。

我希望进行查询,例如:

email_template = EmailTemplate.first
email_template.email_account = current_user.email_accounts.where(:_id => params[:email_account_id).first

以下是关系:

class User
  include Mongoid::Document
  embeds_many :email_accounts, :inverse_of => :user
  has_many :email_templates, :inverse_of => :user
end

class EmailAccount
  include Mongoid::Document
  embedded_in :user, :inverse_of => :email_accounts
  has_many :email_templates :inverse_of => :email_account
end

class EmailTemplate
  include Mongoid::Document
  belongs_to :user, :inverse_of => :email_templates
  belongs_to :email_account, :inverse_of => :email_templates
end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 mongodb mongoid


    【解决方案1】:

    你可以试着改变你的联想:

    class User
      include Mongoid::Document
      has_many :email_accounts
    end
    
    class EmailAccount
      include Mongoid::Document
      belongs_to :user
      embeds_many :email_templates :inverse_of => :email_account
    end
    
    class EmailTemplate
      include Mongoid::Document
      embedded_in :email_account, :inverse_of => :email_templates
    end
    

    -->一个用户有许多嵌入EmailTemplatesEmailAccounts

    那么你可以这样做:

    email_account = current_user.email_accounts.find(params[:email_account_id])
    email_account.email_templates << EmailAccount.all.map(&:email_templates).flatten.first
    

    您无法通过这种方式访问​​嵌入式文档:

    email_template = EmailTemplate.first
    

    你必须先通过EmailAccount:

    email_template = EmailAccount.all.map(&:email_templates).flatten.first
    

    要回答您的第一个问题,我认为这是可能的,但肯定不是正确的方法。 :)

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 2016-10-11
      • 2011-06-02
      • 2020-09-25
      相关资源
      最近更新 更多