添加范围以在 rails 中以其创建时间的相反顺序获取对象

Adding scope to get objects in reverse order of their created time in rails

我是 Ruby rails 和编程的新手。 我正在做一个练习,我有一个 Post 模型,我需要向它添加一个新的 scope 来检索它对象的创建时间倒序。

这是我的模型代码:

class Post < ActiveRecord::Base
      has_many :comments
      belongs_to :user 
scope :ordered_by_reverse_order, -> { order('created_at DESC').reverse} 
end

我也试过{reverse('created_at DESC')},都没有用。

试试这个:

范围:ordered_by_reverse_order,-> {顺序('created_at ASC')}

听起来你想要 reverse_order(Rails 3+)。

scope :ordered_by_reverse_order, -> { order(:created_at).reverse_order }

在 rails 上定义模型范围时,我更喜欢使用 class 方法。 这与您的范围方法完全相同,但我个人认为它更清晰。

尝试按升序而不是降序排列您的帖子:

class Post < ActiveRecord::Base
  has_many :comments
  belongs_to :user 

  def self.reversed
    order('created_at ASC')
  end 
end

# ASC
# Fri, 20 Feb 2015 08:41:26 UTC +00:00
# Fri, 20 Feb 2015 08:42:25 UTC +00:00
# Fri, 20 Feb 2015 08:43:53 UTC +00:00

# DESC
# Fri, 20 Feb 2015 12:43:25 UTC +00:00
# Fri, 20 Feb 2015 08:44:48 UTC +00:00
# Fri, 20 Feb 2015 08:43:53 UTC +00:00

执行以下命令应该return你想要什么:

Post.reversed

您也可以只按 DESC 排序,而不是像这样使用 .reverse_order

default_scope { order(created_at: :desc) }