2017-10-27 7 views
0

나는 또한여러 모델을 레일에서 제거하는 방법?

샘플 카테고리 모델을 acts_as_paranoid있다

class User 
    acts_as_paranoid 
    has_one :category 
    has_one :brand 
    has_one :item   

    INDEXED_FIELDS = { 
    only: [:name], 
    include: { 
     category: { only: [:name] }, 
     item: { only:[:name] }, 
     brand: { only: [:name]}, 
    } 
    } 

    def custom_json 
    Category.unscoped do 
     Item.unscoped do 
     Brand.unscoped do 
      self.as_json(INDEXED_FIELDS) 
     end 
     end 
    end 
    end 
end 

사용자 모델은 다음과 같은 한 관계를 acts_as_paranoid있다 사용자 모델 아래와 같이 여러 모델을 unscope하기 위해 노력하고, 브랜드 및 품목 모델은 동일한 코드

class Category 
    acts_as_paranoid 
    belongs_to :user 
end 

'N'개의 모델을 사용하여이 작업을 동적으로 수행 할 수 있습니다 (예 :

). 난 당신이 가질 수있는 방법은 다시 넣어 다음 []default_scopes 설정,에 의해 수동으로 클래스를 unscope하는 생각
+0

정확하게 범위를 지정 취소하여 수행하려는 작업은 무엇입니까 ?? –

+0

@NarasimhaReddy 여러 모델에서 기본 범위 조건을 제외하고 싶습니다. –

+1

좋습니다. 그러나 한 번에 여러 모델의 범위를 해제하는 시나리오는 무엇입니까? 우물쭈물하고있는 동안 우리는 할 수 있습니까? –

답변

0

처럼
def custom_json 
    [Category, Item, Brand].each do 
    # do unscoping 
    end 
end 

협회 보인다.

classes_to_unscope = [Category, Item, Brand] 
# remove default_scopes, saving them in previous_scopes 
previous_scopes = classes_to_unscope.map do |klazz| 
    scopes = klazz.default_scopes 
    klazz.default_scopes = [] 
    scopes 
end 
self.as_json(INDEXED_FIELDS) 
# put default_scopes back 
classes_to_unscope.each_with_index do |klazz, i| 
    klazz.default_scopes = previous_scopes[i] 
end 
+0

'klazz.default_scoping'은 정의되지 않은 메서드로주는 에러입니까? –

+0

죄송합니다, 오타,'default_scopes'였습니다. –