大家好,我有一个来自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.
答案 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