我有一个模型,blog_posts有一个字段“published_at”。我想从该模型中选择最新的两个博客,以显示在我的主页上。不知道如何构建它。
目前我有一个解决方案需要一小部分数据,但是当我在表中没有任何内容时它会一直失败,而不是解决这个问题我觉得可能有更好的方法来检索数据。
我需要在单独的调用中选择博客,例如
@blog_post.latestpost
,@blog_post.secondlatestpost
答案 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)
从Rails 5开始,您可以使用BlogPost.second_to_last
。
http://api.rubyonrails.org/v5.0/classes/ActiveRecord/FinderMethods.html#method-i-second_to_last
答案 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
虽然我认为使用offset
和limit
是更简洁,更便携的版本。内部second
(以及third
,fourth
)使用find_nths
方法。记录在这里:
similar question from 2013