Mongoid :: Errors :: MixedRelations:Mongoid + Devise

时间:2011-10-17 16:38:28

标签: ruby-on-rails devise mongoid

大家好,我有一个来自Devise的模特用户,有这种关系:

user.rb

# Relationships  
references_many :houses, :dependent => :delete

现在我有一个用脚手架创建的样板房:

house.rb

# Relationships
referenced_in :user, :inverse_of => :houses 
embeds_many :deals

现在我对这种关系进行了模范处理:

embedded_in :house, :inverse_of => :deals

在我的routes.rb中我有:

resources :houses do
  resources :deals
end

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

ruby-1.9.2-p180 :009 > User.first.deals.first

我收到了下一个错误:

Mongoid::Errors::MixedRelations: Referencing a(n) Deal document from the User document via a relational association is not allowed since the Deal is embedded.

1 个答案:

答案 0 :(得分:1)

根据您提供的信息,用户与交易没有直接关系。

您似乎试图这样做:

class User
  [...]
  references_many :houses, :dependent => :delete
  references_many :deals
end

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

由于您的交易已嵌入到Houses中,因此您无法通过关系直接从用户访问它们。 这是Mongoid的一个已知限制。

您可以使用:

@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