0

自己結合型の1対多のセットアップを使用するRailsプロジェクトを実行しています。

Userというクラスがあり、多くの顧客がいます。各顧客には、次のような多くの注文リストがあります。

class User < ActiveRecord::Base
  has_many :customers, class_name: 'User', foreign_key: 'owner_id'
  belongs_to :owner, class_name: 'User'
  has_many :order_lists, dependent: :destroy

Railsコンソールを開いたとき。私はこれをやろうとしました:

user.customers.order_lists

私はこれを得た:

NoMethodError: undefined method `order_lists'

私がこれをやろうとすると:

user.customers.first.order_lists

私はその顧客の注文リストを受け取ります。しかし、どうすればすべての顧客のすべての注文リストを受け取ることができますか?

誰かアイデア?

4

2 に答える 2

1

では、ユーザーに関連付けられているすべての顧客のすべてのorder_listが必要ですか?

これでうまくいきます:

user.customers.map(&:order_lists).flatten

または、次のようにcustomer_idのセットを受け取るOrderListにスコープを作成することもできます。

scope :for_customer_ids, ->(customer_ids) {
  where("user_id IN (?)", customer_ids)
}

その後

OrderList.for_customer_ids(user.customer_ids)
于 2012-10-29T19:56:38.770 に答える
1

あなたが呼び出すとき、で多くの関係があります:

user.customers

ユーザーが「持っている」すべての顧客の配列を返すので、電話をかけると

user.customers.order_lists

order_lists多数の顧客に呼び出されています。(メソッドはありませんorder_lists)。最初の方法では、アレイの最初の顧客が得られるため、機能します。次のようなこともできます。

user.customers[0].order_lists

必要に応じて。(ただし、最初に使用する方が良いです)

すべての顧客のorder_listsを取得するには、すべての顧客をループして、そのように取得します。

于 2012-10-29T19:54:24.603 に答える