0

我有这些关系:

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>

这是错误的,因为我有一个用户,但我想获得当前卖家的所有订单。

如何获取当前卖家的所有订单?

谢谢!

4

1 回答 1

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

如果您需要使用sellerseller_id

于 2012-08-17T17:18:08.783 回答