Ransack:从空白索引开始/没有结果

时间:2014-03-03 23:03:28

标签: ruby-on-rails search indexing ransack

刚开始使用Ransack,我很喜欢它。但是不顾一切地知道如何从空白索引开始,没有结果?强制用户使用搜索表单。这是控制器到目前为止的样子。

meals_controller.rb

 def index
    @search = Meal.search(params[:q])
    @meals = @search.result
 end

修改 -

一些如何运作,我不知道如何

meals_controller.rb

 class MealsController < ApplicationController
 before_filter :set_search

 def index
   if params[:q].blank?
     @q = Meal.none.search
   else
     @q = Meal.search params[:q]
   end
     @meals = @q.result
 end

 def set_search
  @search=Meal.search(params[:q])
 end  
end

2 个答案:

答案 0 :(得分:4)

我不喜欢使用空白范围,因为你不必要地查询。

我改用以下方法:

# If no search params, default to empty search
if params[:q] && params[:q].reject { |k, v| v.blank? }.present?
  @q = User.search(params[:q])
  @users = @q.result
else
  @q = User.search
  @users = []
end

然后,您仍然可以在视图中使用@q作为search_form_for,但默认情况下不进行查询。

答案 1 :(得分:1)

我使用名为none的伪作用域,它不返回where{id < -1}之类的记录(你确实使用了squeel,对吗?)。
然后写

def index
  if params[:q].blank?
    @q = Meal.none.search # so you have a ransack search
  else
    @q = Meal.search params[:q]
  end
  @meals = @q.result
end

<强>加成

在您看来,您需要:

<%= search_form_for @q, url: meals_path, html: {method: :get} do %>
  ...
<% end %>