2017-04-19 39 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

相关问题