我有一组博客帖子,我希望按照最近的日期顺序显示它们。如何在控制器中调用该方法
我试过
@post1 = Post.last
但我怎么能做到这个之前的3?
答案 0 :(得分:1)
此:
@post1 = Post.last
没有像您认为的那样给出最后Post
。如果您查看日志,您会看到以下内容:
selector={"$query"=>{}, "$orderby"=>{:_id=>-1}}
所以它将是“id
订单中的最后一个”,而不是最后一个日期。如果你想要最后一个时间戳,那么你必须这样说:
@post1 = Post.order(:created_at => :desc).first
如果你有一个更符合你意图的日期或时间戳,你可以使用其他日期或时间戳代替:created_at
。
现在,如果你想要前面的那三个,那么抓住四个扔掉一个:
other_three = Post.order(:created_at => :desc).limit(4)[1.3] # or any of the ways
或者您可以使用offset
跳过第一个:
other_three = Post.order(:created_at => :desc).offset(1).limit(3)
答案 1 :(得分:0)
这可以给你你想要的东西:
@post1 = Post.last(4).reverse[0..-2]
Post.last(4).reverse
将按降序向您提供最后4条记录。然后,用这个:Post.last(4).reverse[0..-2]
你抓住除了你想要的最后一个元素之外的所有元素。
如果您不想要descending
订单,那么您可以在没有reverse
部分的情况下执行此操作:
@post1 = Post.last(4)[0..-2]
希望这有帮助。
你也可以这样做:
@posts = Post.limit(4).order(updated_at: :desc)[1..-1]