scope_builder를 사용하여 활성 레코드 모델 검색 () 메소드에서 지정된 범위를 조건부 빌드

StackOverflow https://stackoverflow.com/questions/292922

  •  08-07-2019
  •  | 
  •  

문제

나는 Ryan Bates의 우수한 것을 사용하고 있습니다 SCOPE_BUILDER 활성 레코드 모델의 Search () 메소드에서 사용할 새 명명 된 범위를 조건부로 구축합니다.

예제 문서는 다음과 같은 작업을 수행 할 수 있음을 보여줍니다.

  # in product model
  def self.search(options)
    scope_builder do |builder|
      builder.released.visible
      builder.cheap if options[:cheap]
    end
  end

그러나 일부 옵션이 통과 한 내 모델에 위의 코드의 관련 버전을 포함시키고 Call Search ()를 포함 할 때, 반환되는 것은 ScopeBuilder :: Builder의 인스턴스이며 옵션으로 사슬로 명명 된 범위를 실행 한 결과가 아닙니다. 나는 지나갔습니다. 그것이 내가 기대할 것입니다.

내 질문은 다음과 같습니다. 빌더의 인스턴스 대신 빌더 (옵션)를 실행 한 결과를 얻으려면 어떻게해야합니까?

도움이 되었습니까?

해결책

SCOPE_BUILDER 블록처럼 보입니다 설계 스코프 빌더 인스턴스를 반환하려면 인스턴스에서 결과를 가져와야합니다.

인스턴스에서 .all을 사용하여 결과를 가져 오십시오. 예를 들어 :

@results = Product.search().all

에서 그의 시험, 이것이 작동 해야하는 것처럼 보입니다 (47 행 : "블록에서 범위를 쌓을 수 있어야합니다").

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top