Отключить поиск в ransack gem по всем

#ruby-on-rails #ransack

#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:

Можно сделать это двумя способами.

1 — Не выполняйте итерацию по пользовательским результатам, если параметр [: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