我有这些关系:
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>
这是错误的,因为我找到了一个用户,但我希望获得当前卖家的所有订单。
如何获得当前卖家的所有订单?
谢谢!
答案 0 :(得分:0)
这完全没问题。你在控制台中看到的是一个Mongoid :: Criteria对象。 Mongoid非常懒于点击数据库,只有在绝对需要时才会这样做。所以不要在这里访问数据库
@orders = Order.where(seller: current_user)
它只保留代理对象,并在您尝试对该数据执行某些操作时加载订单。因此,为了在控制台中获取您的订单,您可以这样做:
p @orders.to_a
此外,Mongoid不支持.where(seller: current_user)
。您需要根据关系的ID创建查询,因此您应该像这样构建查询:
@orders = Order.where(seller_id: current_user.id)
另一件事是 - 你定义了关系,所以我会使用它们而不是自己创建查询,而不是
@orders = Order.where(seller_id: current_user.id)
你可以使用
@orders = current_user.solo_orders
如果您需要使用seller
或seller_id