2017-04-19 2 views
-1

도움을 청합니다. 나는 Rails 4, Ruby 2.2.3 및 PostgreSQL 9.6을 사용하고 있습니다. 나는 pg_search에 기반 검색과 웹 사이트가, 그리고 여러 모델과 함께 완벽하게 작동합니다 :pg_search + Rails - 검색 결과가 없으면 페이지로 리디렉션되지 않습니다.

/app/models/event.rb: 

multisearchable against: [:title, :subtitle] 

모두 검색 모델을 검색 컨트롤러는 공식 매뉴얼에 의해 매우 간단 잘 살고.

/app/controllers/results_controller.rb: 

class ResultsController < FrontendController 
    def index 
    @search_results = PgSearch.multisearch(params[:query]) 
    end 
end 

그리고 내 결과보기 :

/app/views/results/index.slim: 

.search-results-wrap 
    - @search_results.each do |pg_search_document| 
    #showing title of each result, etc. 

지금 내가 전에 확인하는 검색 결과 페이지로 리디렉션하여 개선 할 필요가 - 거기 모두에서 어떤 결과가? 결과가 없다면 방향을 바꾸는 데별로 의미가 없으며 현재 페이지에서 플래시 메시지 (또는 이와 비슷한 내용)를 "미안하지만 결과가 없습니다"라고 표시하는 것이 더 현명합니다.

가능한 방법이 있습니까?

+0

예 물론 가능합니다. 가능하다면 생각할 필요도 없습니다 -)) 코드를 게시하십시오.) – marmeladze

+0

"[ask]"와 "[mcve]"와 그 링크 된 페이지를 읽으십시오. 그것은 명확하지 않고 넓다. –

답변

0

이와 비슷한?

if (<your search function>).empty? 
    flash.now[:notice] = "No, results" 
    render '<your current search page>' 
else 
    redirect_to '<your search results page>' 
end 
+0

아마도,하지만 PgSearch 매뉴얼에서 검색 기능을 정의하는 것에 대한 정보는 보지 못했습니다. 나는 약간의 코드를 추가했다. 아마도 퍼즐을 푸는 것이 더 명확해질 것이다. – crcerror

0

나는 모델 접근

Article.rb

def self.search(query) 
    if query.present? 
     search_for(query) # takes you to your search method 
    else 
     # No query? Return all records, newest first. 
     Article.all.order('updated_at DESC') 
    end 
    end 

pg_search_scope :search_for, 
    ... 

기사 색인이나 검색 검색 결과 페이지

- if @articles.present? 
    # Show articles 
- else 
    p No articles found. Use other queries 

컨트롤러

def index 
    @articles = Article.search(params[:query]) 
를 사용하는 것이 좋습니다

가장 좋은 방법은 사용자에게 결과가 표시되는지 또는 오타가 있었는지 또는 상황을 다르게 볼 필요가 있는지를 항상 알려주는 것입니다.

+0

글쎄요, 요점은 검색 할 텍스트가 있는지를 정의하는 것이 아니라 결과 페이지로 전달하기 전에 확인해야 할 것입니다 - 레일에 표시 할 결과가 있고없는 경우 리디렉션을 피하십시오. 하지만 나는 당신이 옳다는 것을 인정해야합니다 - 검색 할 텍스트가 있는지 확인하기 위해 반드시 코드를 추가해야합니다. 고마워요 :) – crcerror

+0

글쎄, 내게 multisearch 생각보다 복잡 해 보인다. 내가 여기서 뭘 잘못 했니? 플래시가 보이지 않았어. 알았어. def self.multisearch (query) if query.present? multisearch (query) else flash.now [: notice] = "경고! 전혀 쿼리하지 않음!" 끝 끝 – crcerror

관련 문제