首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongoid::Errors::MixedRelations: Mongoid + Devise

Mongoid::Errors::MixedRelations: Mongoid + Devise
EN

Stack Overflow用户
提问于 2011-10-18 00:38:28
回答 1查看 492关注 0票数 4

我有一个来自Devise的Model User与这种关系:

user.rb

代码语言:javascript
复制
# Relationships  
references_many :houses, :dependent => :delete

现在我有了一个用脚手架创建的模型房子:

house.rb

代码语言:javascript
复制
# Relationships
referenced_in :user, :inverse_of => :houses 
embeds_many :deals

现在我有一个处理这种关系的模型:

代码语言:javascript
复制
embedded_in :house, :inverse_of => :deals

在我的routes.rb中,我有:

代码语言:javascript
复制
resources :houses do
  resources :deals
end

当我尝试获取在控制台中进行交易的用户时:

代码语言:javascript
复制
ruby-1.9.2-p180 :009 > User.first.deals.first

我得到了下一个错误:

代码语言:javascript
复制
Mongoid::Errors::MixedRelations: Referencing a(n) Deal document from the User document via a relational association is not allowed since the Deal is embedded.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-23 00:00:43

使用您提供的信息,用户不会直接与交易相关。

看起来你想要做的是:

代码语言:javascript
复制
class User
  [...]
  references_many :houses, :dependent => :delete
  references_many :deals
end

class Deal
  [...]
  embedded_in :house
  referenced_in :user
end

由于您的交易嵌入到房屋中,因此您无法通过关系直接从用户访问它们。这是Mongoid的一个众所周知的局限性。

您可以使用:

代码语言:javascript
复制
@houses_that_match = House.where("deals.user_id" => @user.id)
@deals = []
@houses_that_match.each do |house|
  @deals += house.deals.select { |deal| deal.user == @user }
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7796806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档