0

我正在做一个 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

在你打电话时有很多关系:

user.customers

它返回用户“拥有”的所有客户的数组,所以当你打电话时

user.customers.order_lists

order_lists正在调用一系列客户。(没有方法order_lists)。第一种方法为您提供数组中的第一个客户,因此它可以工作。您还可以执行以下操作:

user.customers[0].order_lists

如果你愿意。(虽然首先使用更好)

获取所有客户的 order_lists 将遍历所有客户并让他们像这样。

于 2012-10-29T19:54:24.603 回答
1

因此,您想要与用户关联的所有客户的所有 order_lists?

这可以解决问题:

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

或者,您可以在 OrderList 上创建一个范围,该范围采用一组 customer_id,如下所示:

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 回答