Rails在获得某个ID

时间:2017-01-19 13:51:41

标签: ruby-on-rails

在我的应用中,由于记录经常被创建,我不想使用标准的分页机制,因为记录不会总是在同一页面上(今天第2页的记录,明天可能在第3页) )。相反,我想做的是在某个ID之后请求记录。

所以,让我说我的帖子表中有100条记录,范围是ID 1-100,我一次显示10条记录。

我想要做的是使用params[:after]作为该ID之后的请求帖子。

所以如果我有params[:after] == 10我想要获得记录11-21(虽然21可能不存在,所以它在表created_at中排序{{1从ID开始。

在我的控制器中,我有类似的东西:

desc

我遇到的问题是if params[:after].present? start_id = params[:after] end_id = start_id+10 @posts = Post.where(:id => start_id..end_id).order('created_at desc').limit(10) else @posts = Post.order('created_at desc').limit(10) end 会返回end_id,但在数据库中,接下来的10个记录ID可能不是那样,所以我最终会返回错误的ID

理想情况下,我需要知道这个帖子的第10个帖子的ID是什么。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

如果给出params[:after],我会执行以下操作:

Post.where('table_name.id > ?', start).order('id desc').limit(10)

如果您不在created_at列上作弊,created_atid列上的订单应该相同,id的订单会更快列(它有一个数字索引和那些东西)

在开始条件中包含表名是可选的,但是如果您想要连接多个表,可以帮助您避免模糊SQL。

答案 1 :(得分:2)

你可以试试这个

Post.where('id > ?', start_id).order('created_at').limit(10)

希望这对你有用