#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