2011-10-17 5 views
4

Les Concevoir Salut les gars j'ai un modèle utilisateur de relations que avec Devise:MongoId :: :: Erreurs MixedRelations: MongoId +

user.rb

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

Maintenant, j'ai une maison modèle créé avec échafaudage :

house.rb

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

maintenant, j'ai un accord modèle avec ces relations:

embedded_in :house, :inverse_of => :deals 

Dans mon routes.rb je:

resources :houses do 
    resources :deals 
end 

Lorsque je tente obtenir l'utilisateur qui font l'affaire dans la console:

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

Je reçois l'erreur suivante:

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

Répondre

1

Avec les informations que vous avez fournies, un utilisateur n'est pas directement r ravi d'un accord.

Il semble que vous avez essayé de le faire:

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

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

Comme vos offres sont intégrées dans les maisons, vous ne pouvez pas y accéder directement auprès des utilisateurs par une relation. Il s'agit d'une limitation connue de Mongoid.

Vous pouvez utiliser:

@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