2012-10-29 2 views
0

나는 자기가 일대 다 설치에 참여하는 레일스 프로젝트를하고 있습니다.레일 연결과 자체 연결 클래스

저는 많은 고객을 보유한 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 

합니다. 나는이 일을 시도 : 나는이 작업을 수행 할 때

NoMethodError: undefined method `order_lists' 

동안 :

user.customers.first.order_lists 

는 그 고객의 주문 목록을 수신 할

user.customers.order_lists 

내가이 있어요. 그러나 모든 고객의 모든 주문 목록을 어떻게받을 수 있습니까?

아무 생각 없습니까? 호출되는

user.customers 

는 모든 고객 사용자 "가"의 배열을 반환합니다, 그래서 당신은

user.customers.order_lists 

order_lists를 호출 할 때 : A의

답변

1

사용자와 관련된 모든 고객에 대해 모든 주문 목록을 원하십니까?

이 트릭 할 것입니다 :

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

또는 그렇게 같은 CUSTOMER_IDS 일련의 소요 OrderList의 범위를 만들 수 있습니다 :

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

그리고

OrderList.for_customer_ids(user.customer_ids) 
+0

이를 솔루션은 콘솔에서 작동하지만 주문 목록을 표시하려고합니다. 그래서 내가 페이지 매기기를 원할 때 이것은 작동하지 않습니다. 다른 해결책? – Niels

+0

OrderList.find (user.customers.map (& : order_list_ids) .flatten 이외의 해결책이 표시되지 않습니다.) 그리고 이전 대답을 바탕으로 구축되었습니다. – Leito

+0

주문 목록에서 범위를 쓸 수 있다고 생각합니다. – annalogarhythm

1

당신이 호출 할 때 많은 관계가있다 고객의 배열에. (방법은 order_lists이 아님). 첫 번째 방법은 배열의 첫 고객을 제공하므로 제대로 작동합니다. 다음과 같이 할 수도 있습니다.

user.customers[0].order_lists 

원한다면 할 수 있습니다. (처음 사용하는 것이 더 낫다.)

모든 고객의 주문 목록을 얻는 것은 모든 고객을 통해 반복하여 얻는 것입니다.