Как выбрать последнюю и вторую до последней записи в модели блога? - PullRequest
4 голосов
/ 28 августа 2011

У меня есть модель, blog_posts, в которой есть поле "ключ-публикации". Я хотел бы выбрать два последних блога из этой модели для отображения на моей домашней странице. Не уверен, как структурировать это, хотя.

В настоящее время у меня есть обходной путь, который берет кусок данных, но он продолжает работать, когда у меня ничего нет в таблице, вместо того, чтобы исправить это, я чувствую, что, возможно, есть лучший способ извлечь данные.

Мне нужно выбрать блоги по отдельным вызовам, например

@blog_post.latestpost, @blog_post.secondlatestpost

Ответы [ 4 ]

7 голосов
/ 10 ноября 2014

Вы также можете сделать:

BlogPost.order(:published_at).last # for the last post
BlogPost.order(:published_at).offset(1).last # for the second to last post
7 голосов
/ 28 августа 2011

Это то, что вы ищете?:

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

Надеюсь, это поможет.

3 голосов
/ 23 марта 2018

Начиная с Rails 5 вы можете использовать BlogPost.second_to_last.

http://api.rubyonrails.org/v5.0/classes/ActiveRecord/FinderMethods.html#method-i-second_to_last

0 голосов
/ 01 июня 2016

Вы также можете использовать ActiveRecord

BlogPost.order("published_at DESC").second

Хотя я думаю, что использование offset и limit является несколько более чистой и более портативной версией. Внутренне secondthird, fourth) используют метод find_nths. Документировано здесь: http://apidock.com/rails/ActiveRecord/FinderMethods/second

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...