禁用搜索所有的搜索宝石

时间:2016-10-10 22:21:28

标签: ruby-on-rails ransack

如何禁用ransack gem来搜索第一个请求中的所有记录?

我拥有数千条记录,并且不希望每次访问该页面时都会加载所有记录。我只是想显示搜索表单。

def index
   @search = ransack_params
   @users = ransack_result
end

private
def ransack_params
  User.search(params[:q])
end

def ransack_result
  @search.result(distinct: false)
end

我的控制台输出显示以下内容:

Processing by UsersController#index as HTML Parameters: {"utf8"=>"✓", "q"=>{"name"=>""}, "button"=>""}
  Rendering users/index.html.erb within layouts/application
  User Load (0.5ms)  SELECT "users".* FROM "users"

1 个答案:

答案 0 :(得分:0)

可以通过两种方式实现。

1 - 如果params [:q]为空,则不要遍历用户结果。 在您尝试使用搜索结果关系的记录之前,不会执行搜索查询。

所以您可以在视图中执行以下操作

unless params[:q].blank?
  # @search.each do ...
end

2 - 创建一个没有结果的空范围

class User < ActiveRecord::Base
  scope :empty_results, -> { where(id: '-1000') }
end

def ransack_params
 if params[:q].blank?
   User.empty_results.search
 else
   User.search(params[:q])
 end
end