如何选择博客模型中的最后一个和最后一个条目?

时间:2011-08-28 17:13:56

标签: ruby-on-rails-3 activerecord

我有一个模型,blog_posts有一个字段“published_at”。我想从该模型中选择最新的两个博客,以显示在我的主页上。不知道如何构建它。

目前我有一个解决方案需要一小部分数据,但是当我在表中没有任何内容时它会一直失败,而不是解决这个问题我觉得可能有更好的方法来检索数据。

我需要在单独的调用中选择博客,例如

@blog_post.latestpost@blog_post.secondlatestpost

5 个答案:

答案 0 :(得分:7)

这是你要找的吗? :

class BlogPost < Activerecord::Base
  def self.latestpost
    order("published_at DESC").limit(1).first
  end

  def self.secondlatestpost
    order("published_at DESC").offset(1).limit(1).first
  end
end

像这样使用:

BlogPost.secondlatestpost

BlogPost.latestpost

希望这有帮助。

答案 1 :(得分:7)

你也可以这样做:

BlogPost.order(:published_at).last # for the last post
BlogPost.order(:published_at).offset(1).last # for the second to last post

答案 2 :(得分:2)

答案 3 :(得分:2)

至少从Rails 4.x起,您可以指定所需的最后记录数。例如。提取最后2条记录:

BlogPost.last(2)

first()也是如此。还有方法second()third()fourth()fifth()forty_two()。从Rails 5.x,second_to_last()third_to_last()开始。

答案 4 :(得分:0)

您也可以使用ActiveRecord

BlogPost.order("published_at DESC").second

虽然我认为使用offsetlimit是更简洁,更便携的版本。内部second(以及thirdfourth)使用find_nths方法。记录在这里: similar question from 2013