2016-12-16 3 views
0

Мое приложение, основанное на уроке Майкла 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). Почему это?

ответ

2

#paginate переопределяет ограничение и смещение отношения.

За то, что вы хотите достичь вы можете передать опцию total_entries в #paginate

@feed_items = current_user.feed.paginate(page: params[:page], total_entries: 100)

+0

Это выглядит так, как будто «total_entries» рассчитывает, сколько страниц necessay для 100 записей и все равно завершат все страницы. В этом случае 4 страницы по 30 на страницу составляют 120 записей. Итак, хотя я установил total_entries: 100, у меня будет 120 записей. – Asarluhi

+1

@Asarluhi Да. Вот как это работает. К сожалению, похоже, что will_paginate ничего не предлагает. Итак, единственное, что я мог бы предложить, - уменьшить 'per_page' –

+1

Существует еще один камень для разбивки на страницы' kaminari', обычно он предпочитается над 'will_paginate', поскольку он поддерживается лучше. Однако кажется, что ни «каминари», ни «will_paginate» не предлагают желаемую функциональность. –

1

Попробуйте

@feed_items = current_user.feed.paginate(page: params[:page], per_page: 30, total_entries: 100) 
Смежные вопросы