2017-04-19 10 views
-1

助けを歓迎します。私はRails 4、ruby 2.2.3、PostgreSQL 9.6を使っています。 私はpg_searchに基づいて検索してウェブサイトを持っている、そしてそれは、複数のモデルを完璧に動作します:pg_search + Rails - 検索結果でページがリダイレクトされない場合は、そのページにリダイレクトされないようにしてください

/app/models/event.rb: 

multisearchable against: [:title, :subtitle] 

どちらも検索可能なモデルと検索コントローラは、公式のマニュアルで、非常に単純なアップsetted。

/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

マルチスキャンは私が思うよりも複雑です。私はここで間違っていたのですか?フラッシュが見えませんでした。 def self.multisearch(query) if query.present? multisearch(query) else flash.now [:notice] = "アラートがありません。 end end – crcerror

関連する問題