Rails Ajax разбивка на страницы / бесконечная прокрутка - как быстро и эффективно? - PullRequest
0 голосов
/ 29 мая 2020

У меня довольно классный c случай ajax разбивки на страницы, где я разбиваю свои записи на страницы (используя Kaminari), и когда пользователь нажимает кнопку «загрузить больше», следующая страница / набор записей должны быть загружены и вставлены через ajax.

Проблема в том, что большинство примеров, которые я вижу, очень упрощены c, с действием индекса, которое выглядит следующим образом:

def index
  users = User.page(params[:page]).per(10)
end

И кнопка разбивки на страницы (или загрузки больше) просто сохраняет вызывая это действие индекса со следующим параметром page.

Проблема в том, что у моего действия с индексом есть LOT больше, чем это, и я не хочу запускать весь этот код, когда все, что мне нужно, это следующая страница пользовательских записей - это медленно и ненужно.

С точки зрения условностей, как лучше всего с этим справиться? Моя мысль заключалась в том, чтобы иметь другой метод в дополнение к к index вот так:

def load_more_users
  users = User.page(params[:page]).per(10)
end

И разбивка на страницы вызывает его вместо индекса. Однако есть ли удобный способ выполнить условное выражение в действии индекса, например, проверить наличие params[:page] и if request.xhr??

Как лучше всего это сделать?

1 Ответ

1 голос
/ 29 мая 2020

Вы можете использовать блок respond_to для этого

respond_to do |format|
  format.html {
     # Existing index controller code
     # Will render the existing template
  }
  format.js {
     users = User.page(params[:page]).per(10)
     render json: users # Or render a partial
  }
end

Ajax попадет в блок format.js, начальная загрузка страницы попадет в блок format.html.

...