0

我有这方面的关系:BSON :: InvalidDocument:无法序列化类用户的目标为BSON

class User 
    include Mongoid::Document 
    has_many :orders, :class_name => 'Order', :inverse_of => :user 
    has_many :sold_orders, :class_name => 'Order', :inverse_of => :seller 
end 

class Order 
include Mongoid::Document 
belongs_to :user, :class_name => 'User', :inverse_of => :orders 
belongs_to :seller, :class_name => 'User', :inverse_of => :sold_orders 
end 

如果我要得到我所运行的所有订单,目前卖家在我的控制器是这样的:

def jobs 
    @orders = Order.where(seller: current_user) 
    p @orders 
    respond_to do |format| 
     format.html { render :layout => 'centered'} 
    end 
end 

我可以在我的日志控制台中看到:

#<Mongoid::Criteria 
    selector: {:seller=>#<User _id: 500541f81d41c82f1b000037, _type: "User", created_at: 2012-07-17 10:44:08 UTC, ....more attributes>}, 
    options: {}, 
    class: Order, 
    embedded: false> 

这是错误的,因为我得到了用户,但我想获得的所有订单立方米rrent卖家。

如何获得当前销售商的所有订单?

谢谢!

+1

http://stackoverflow.com/questions/5523582/mongoid-scope-with-referenced-object-as-criteria/5556041#5556041 – rubish 2012-08-17 16:07:59

+0

我使用的是mongoid 2.4.12。它对我不起作用:(用@orders = Order.where(:seller_id => current_user.id)'非常感谢! – hyperrjas 2012-08-17 16:17:42

+1

那么,这个例外在哪里引发? – 2012-08-17 17:08:51

回答

0

这完全没问题。你在控制台中看到的是一个Mongoid :: Criteria对象。 Mongoid很懒,只能在绝对需要时才打到数据库。因此,而不是在这里访问DATABSE

@orders = Order.where(seller: current_user) 

只保持了代理对象,当你尝试做对数据进行处理将加载订单。因此,为了获得在控制台订单你可以这样做:

p @orders.to_a 

此外,Mongoid不支持.where(seller: current_user)。你需要根据IDS的关系,以创建查询,所以你应该建立你的查询是这样的:

@orders = Order.where(seller_id: current_user.id) 

另一件事是 - 你已经定义的关系,所以我将改为使用它们创建自己的查询等等,而不是

@orders = Order.where(seller_id: current_user.id) 

可以使用

@orders = current_user.solo_orders 

,你不必担心,如果你需要使用sellerseller_id

+0

谢谢你现在它工作正常'@ orders.to_a'到数组,谢谢 – hyperrjas 2012-08-17 23:46:06