2013-05-11 93 views
0

我有一个嵌入了很多email_accounts的用户。同时我希望email_accounts可以有很多email_templates。这可能吗?当我尝试合并它时,我的Rails应用程序拒绝接受关系。Rails/Mongoid:嵌入式(embedded_in)文档可以有多个文档(has_many)吗?

我想提出查询,如如:

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 

回答

2

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

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 

- > A 用户有很多EmailAccounts其中嵌入EmailTemplates

然后,你可以这样做:

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 

要回答哟你的第一个问题,我认为这是可能的,但肯定不是正确的方式去这里。 :)

希望它有帮助。