Agradezco una ayuda. Estoy usando Rails 4, Ruby 2.2.3 y PostgreSQL 9.6. Tengo un sitio web con búsqueda basada en pg_search y funciona perfectamente con múltiples modelos:
/app/models/event.rb: multisearchable against: [:title, :subtitle]Tanto los modelos de búsqueda como el controlador de búsqueda se configuran de manera muy simple mediante manuales oficiales.
/app/controllers/results_controller.rb: class ResultsController < FrontendController def index @search_results = PgSearch.multisearch(params[:query]) end endY mi vista de resultados:
/app/views/results/index.slim: .search-results-wrap - @search_results.each do |pg_search_document| #showing title of each result, etc.Ahora necesito mejorarlo comprobando antes de redirigir a la página con resultados de búsqueda. ¿Hay algún resultado? Quiero decir, no tiene mucho sentido redirigir si no hay resultados y será más inteligente mostrar un mensaje flash (o algo así) "lo siento, no hay resultados" en la página actual.
¿Hay formas posibles de hacerlo?
¿Algo como esto?
if (<your search function>).empty? flash.now[:notice] = "No, results" render '<your current search page>' else redirect_to '<your search results page>' endRecomiendo usar el enfoque modelo
Artículo.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, ...Índice de artículos o página de resultados de búsqueda de búsqueda
- if @articles.present? # Show articles - else p No articles found. Use other queriesControlador
def index @articles = Article.search(params[:query])La mejor práctica es decirle siempre al usuario si está obteniendo algún resultado o si cometió un error tipográfico o necesita buscar las cosas de manera diferente.