Mongoid :: Ошибки :: MixedRelations: Mongoid + Devise - PullRequest
4 голосов
/ 17 октября 2011

Привет, ребята. У меня есть модель-пользователь из Devise с такими отношениями:

user.rb

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

Теперь у меня есть Model House, созданный с помощью скаффолда:

house.rb

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

Теперь у меня есть модельная сделка с этими отношениями:

embedded_in :house, :inverse_of => :deals

В моем маршрутах.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 Ответ

1 голос
/ 22 января 2012

С предоставленной вами информацией пользователь не имеет прямого отношения к сделке.

Похоже, вы пытались сделать:

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

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

Поскольку ваши Сделки встроены в Дома, вы не можете получить к ним доступ напрямую от Пользователей через отношения. Это известное ограничение 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
...