1

검색 가능한 사용자 모델을 정의했습니다.Sunspot : 내 Model.search 코드를 어디에 넣을까요?

class User < ActiveRecord:Base 
    searchable do 
     #... 
    end 
end 

이제 실제로 검색 호출을 수행 할 수있는 가장 적합한 곳이 궁금합니다.

User.search do 
    keywords kw 
    # insert a toooon of with, facets etc... 
end 

이 거대한 블록을 갖고 싶지 않습니다. 컨트롤러에서. draperdraper (데코레이터 패턴 구현)을 사용하고 있지만 실제로 모델과 결합되어 있으므로 이것이 최상의 장소라고 생각하지 않습니다. 아니면 그렇지?

검색 클래스를 만들고 컨트롤러에서

@search = Search::UserSearch(params) 

와 같은 작업을해야합니까?

고마워!

답변

3

이것을 Search :: UserSearch 클래스에 넣는 것이 좋습니다. 우려를 분리하고 단 하나 책임 원칙을 따르는 것이 항상 좋은 생각입니다.

당신은 그럼에도 불구하고

응용 프로그램/모델/검색/user_search.rb

(자동로드 경로를 검색 디렉토리를 추가하는 것을 잊지 마세요)

이 클래스를 넣을 수 있습니다

I 내 프로젝트 중 하나에서이 일을하고있어 행복해.

+0

그러면 수업을하겠습니다. 나는 그것을 애플 리케이션/모델에 넣을 것이라고 생각하지 않는다. 만약 내가 각 검색을 저장하기로 결정했다면, 그 곳에 넣을 수 있습니다. 그러나이 경우에 lib에서 더 좋을 것이라고 생각합니까? – Robin

1

검색 논리를 분리 클래스에 넣는 것이 좋습니다. 스키니 콘트롤러의 아이디어를 따르고 검색 클래스는 앱에서 재사용 할 수 있으며 테스트하기 쉽습니다.