2017-04-19 42 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. 

現在我需要通過檢查之前重定向到頁面與搜索結果進行改進 - 有沒有在所有的任何結果?我的意思是,如果沒有結果,重定向沒有多大意義,只需在當前頁面上顯示一條Flash消息(或類似的內容)「抱歉,無結果」就會更聰明。

有沒有可能的方法來做到這一點?

+0

是的,當然這是可能的。如果不可能的話,你甚至不應該考慮它 - ))發佈一些代碼 - )) – marmeladze

+0

請閱讀「[問]」和「[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比我想象的更復雜。我在這裏做錯了什麼?沒有看到任何flash.now。 def self.multisearch(query) if query.present? multisearch(query) else flash.now [:notice] =「alert!根本沒有查詢!」結束 結束 – crcerror

相關問題