2016-10-10 218 views
0

如何禁用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" 

回答

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