为什么限制方法在视野中不受尊重?

时间:2016-12-16 11:08:35

标签: ruby-on-rails limit

我的应用程序基于Michael Hartl的教程,在主页中呈现用户微博的集合以及用户通过方法{{1}跟踪的微博的集合} feed

user.rb

我增加了100个微博的限制。
登录控制台,我检查了限制是否符合:

  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

控制器中定义了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

然后它被渲染到视图中。
但是,当我用浏览器浏览页面时,限制不受尊重,我得到所有微博(251个而不是100个,9个页面,每个30个微博,而不是4个)。那是为什么?

2 个答案:

答案 0 :(得分:2)

#paginate重新定义了关系的限制和偏移。

对于您想要实现的目标,您可以将选项total_entries传递给#paginate

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

答案 1 :(得分:1)

试试这个

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