В моем приложении я разрешаю пользователям понравиться объект item/cover, который они могут позже просмотреть в своем профиле.Paginate несколько моделей с Ajax & Params
У меня есть модель профиля, которая показывает список предметов и обложек в отдельных вкладках. Пользователь нажимает на ссылку, чтобы выбрать, какой список нужно просмотреть, который отправляет имя объекта параметрам [: filter] и перезагружает страницу с правильным списком.
Теперь я пытаюсь создать бесконечный свиток для обоих списков с помощью Kaminari и ajax. Он отлично работает для каждого списка отдельно, но когда я пытаюсь использовать оператор if с параметрами (в профилях/show.js.haml), разрывы загрузки. любые мысли?
profiles_controller.rb
class ProfilesController < ApplicationController
def show
@covers = @user.get_voted(Cover).page(params[:page])
@items = @user.get_voted(Item).page(params[:page])
respond_to :html, :js
end
end
профили/show.html.haml
.menu
= link_to 'Covers', profile_path(filter: "covers")
= link_to 'Items', profile_path(filter: "items")
.objects
= render 'profiles/covers' if !params[:filter] || params[:filter] == "covers"
= render 'profiles/items' if params[:filter] == "items"
профили/_covers.rb
- if @covers.any?
.covers= render @covers
.pagination= link_to_next_page @covers, 'View More', params: params, remote: true
- else
= "No covers yet..."
профили/_items.rb
- if @items.any?
.items= render @items
.pagination= link_to_next_page @items, 'View More', params: params, remote: true
- else
= "No items yet..."
профили/show.js.haml
- if !params[:filter] || params[:filter] == "covers"
$('.covers').append("#{j render @covers}");
- if @covers.last_page?
$('.pagination').remove();
- else
$('.pagination').html("#{j link_to_next_page(@covers,'View More', params: params, remote: true)}");
- if params[:filter] == "items"
$('.items').append("#{j render @items}");
- if @items.last_page?
$('.pagination').remove();
- else
$('.pagination').html("#{j link_to_next_page(@items,'View More', params: params, remote: true)}");
приложение/активы/JavaScripts/pagination.js
$(function() {
if ($('.pagination').size() > 0) {
$(window).on('scroll', function() {
var next_page_url = $('.pagination a[rel=next]').attr('href');
if (next_page_url && $(window).scrollTop() > $(document).height() - $(window).height() - 200) {
$('.pagination').html('<img src="/assets/ajax-loader.gif" alt="Loading..."/>');
$.getScript(next_page_url);
}
});
} });