禁用搜查 gem 搜索全部
Disable ransack gem searching all
如何禁用 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 - 如果 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
如何禁用 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 - 如果 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