2011-10-07 3 views
1

난 당신이 태그 충돌 검사, 스핑크스 는 또한 태그 에 의해 검색 할 수 있습니다 그리고 다른 관련 CIMG에 의해 검색 할 수 있습니다 통해 그들은, 내용으로 검색 할 수있는 #INDEX 에서 볼 수 Cimgs 라는 이름의 자원을검색 모드를 어떻게 지정해야합니까? 다른 리소스? 하나의 리소스? 여러 행동?

그리고 내 질문은 다음과 같습니다. 어떤 경로가 더 좋은 방법입니까? #index에 추가 매개 변수를 전달하고 해당 매개 변수를 검색해야합니까? 결국 그들은 모두 같은 시각을 사용합니다. 또는 각 검색 방법에 대한 작업을 만들어야합니까? 아니면 전체 리소스입니까?

resources :cimgs, path: 'pics' do 
    collection do 
     get 'search(/:q)', action: :index, search_by: :content, as: :search_by_content 
     get 'tags/:tag', action: :index, search_by: :tags, as: :search_by_tag 
     get 'page/:page', action: :index 
    end 

    member do 
     get 'related', action: :index, search_by: :related, as: :search_by_related 
    end 
    end 

    root :to => 'cimgs#index' 

문제는 내가 페이징 미나리를 사용하고 있다는 것입니다, 그것은 페이지/감지하지 않습니다 다음 루트가 아닌 다른 경로 페이지를

나는 현재 다음과 같은 일을 해요. 내 컨트롤러 액션을

을 그리고 여기에 있습니다 : 내가 한 행동에 그들 모두를 유지하는 것

def index 
    @cimgs = case params[:search_by] 
     when :content; Cimg.content_search  params[:q], params[:page], request.remote_ip 
     return redirect_to @cimgs[0] if @cimgs.length == 1 
     when :tag;  Cimg.search_by_tag  params[:tag], params[:page] 
     when :related; Cimg.search_related_to params[:id], params[:page] 
     else;   Cimg.get_for_front_page    params[:page] 
    end 

    render :index 
    end 

답변

0

: (페이지 나는 실제로 페이지 /를 감지하는 데 사용하는 메커니즘을 모른다). 내 가정은 결국 검색 방법을 결합하는 것이 유용 할 것이라고 결정할 것입니다 ("이 다른 이미지와 관련된 이미지를 원하지만 '케첩'이라는 태그가 있습니다.). 이미 모든 검색을 처리하는 단일 작업이 있지만 별도의 작업이있는 경우 훨씬 더 어렵거나 적어도 중복 코드가 많이 포함되는 경우 쉽게 수행 할 수 있습니다.

내가 작업하고있는 사이트에서 비슷한 것을합니다. 나는 마스터 검색 해시를 params[:search]으로 취한 다음 그 해시로 각각의 개별 검색어를 갖는다. 나는 named_scope을 변경 한 이후 그리고, 각 검색 옵션, 나는 같은 것을 할 수있다 (3 레일에서 다른 이름이 될 수도 있습니다) :

scope = MyModel.scoped 
params[:search].each_pair do |key, value| 
    scope = scope.send(key, value) 
end 
@models = scope.all 

플러스 몇 가지 기본적인 오류 검사를하지만 그건 생각입니다.

희망 하시겠습니까?