Мое приложение, основанное на уроке Майкла Hartl, в оказывает на домашней странице коллекции microposts пользователя и из microposts для этого пользователя следуя через метод feed
в user.rb
:Почему метод ограничения не соблюдается?
def feed
following_ids = "SELECT followed_id FROM relationships
WHERE follower_id = :user_id"
Micropost.where("user_id IN (#{following_ids})
OR user_id = :user_id", user_id: id).limit(100)
end
Я добавил предел 100 microposts.
Вход в консоли, я проверил, что предел был соблюден:
2.3.1 :003 > user.feed.count
(1.6ms) SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "microposts" WHERE (user_id IN (SELECT followed_id FROM relationships
WHERE follower_id = 1)
OR user_id = 1) LIMIT $1) subquery_for_count [["LIMIT", 100]]
=> 100
@feed_item
переменная определена в контроллере следующим образом:
@feed_items = current_user.feed.paginate(page: params[:page])
, то оно отображается в поле зрения.
Однако, когда я просматриваю страницу с помощью своего браузера, предел не соблюдается, и я получаю все микропосты (251 вместо 100, 9 страниц по 30 микропотоков вместо 4). Почему это?
Это выглядит так, как будто «total_entries» рассчитывает, сколько страниц necessay для 100 записей и все равно завершат все страницы. В этом случае 4 страницы по 30 на страницу составляют 120 записей. Итак, хотя я установил total_entries: 100, у меня будет 120 записей. – Asarluhi
@Asarluhi Да. Вот как это работает. К сожалению, похоже, что will_paginate ничего не предлагает. Итак, единственное, что я мог бы предложить, - уменьшить 'per_page' –
Существует еще один камень для разбивки на страницы' kaminari', обычно он предпочитается над 'will_paginate', поскольку он поддерживается лучше. Однако кажется, что ни «каминари», ни «will_paginate» не предлагают желаемую функциональность. –