내 범주를 처리하기위한 재귀 트리 구조가 있습니다. 각 리프 카테고리는 0 개 이상의 거래를 가질 수 있습니다. 다음과 같은 범주가리프 노드가 아닌 경우 재귀 트리 구조의 자식 특성을 가져옵니다.
class Category < ActiveRecord::Base
has_many :sub_categories, class_name: "Category", foreign_key: "parent_category_id"
belongs_to :parent_category, class_name: "Category"
has_many :deal_categories
has_many :deals, through: :deal_categories
def leaf?
!has_sub_categories?
end
def has_sub_categories?
!sub_categories.empty?
end
end
Deals
및 DealCategories
에 의해 정의된다 보인다 :
class Deal < ActiveRecord::Base
has_many :deal_categories
has_many :categories, through: :deal_categories
end
class DealCategory < ActiveRecord::Base
belongs_to :deal
belongs_to :category
end
도 Deals
만 잎 카테고리로 존재할 수 있는지 확인하고 몇 가지 검증이있다. 따라서 리프 노드에서 category.deals
을 호출하면 일부 거래가 발생하고 루트 노드에서 호출하면 빈 결과가 표시됩니다. 문제 없다.
하지만 지금은 category.deals
이 루트 노드가 아닌 경우 자녀의 거래를 반환하겠습니다. 다음과 같이 나의 접근 방식은 내 Category
클래스에 다음 메소드를 오버라이드 (override) 할 수있다 :
alias_method :original_deals, :deals
def deals
if leaf?
self.original_deals
else
self.sub_categories.deals
end
end
내가 sub_categories
에 직접 deals
를 호출 할 수 없기 때문에 이것은 그러나 작동하지 않는 오류가
undefined method `deals' for #<Category::ActiveRecord_Associations_CollectionProxy:0x00000009243d40>
어떻게
인 이 문제를 해결합니까?