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)

もう1つは、リレーションが定義されているので、自分でクエリを作成する代わりに、リレーションを使用するということです。

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

あなたが使用することができます

    @orders = current_user.solo_orders

seller使用する必要があるかどうかを心配する必要はありませんseller_id

于 2012-08-17T17:18:08.783 に答える