我可以在 Rails 4 中构造双阶 SQL 子句吗?范围,阿雷尔表



我有一小行代码,我正在尝试在模型文件中从Rails 2升级到Rails 4。

class Forum < ActiveRecord::Base
belongs_to :project
has_many :topics, :order => 'sticky desc, replied_at desc', :dependent => :destroy do
   def first
     @first_topic ||= find(:first)
   end
 end

我试图重构并适当地迁移到 Rails 4 的是上述关联的一小部分。

:order => 'sticky desc, replied_at desc'

从我的敏捷Web开发4书中,我引用

请注意,Rails 不知道如何处理多个订单或限制子句,因此请确保每个调用链只使用这些子句一次。

以下是 Rails 4 指南中的示例范围

class Customer < ActiveRecord::Base
  has_many :orders, -> { order "date_confirmed DESC" }
end

有了这些知识,我就不能将代码重构成这样的东西作为范围

scope :sticky_and_replied_at_desc {order("sticky DESC, replied_at DESC")}

这不是重构此语句的有效方法,还是我需要将此语句分解为两个范围并将它们链接起来?也许甚至是一张桌子?有什么想法吗?

似乎可以创建一个双阶 SQL 语句作为作用域。

has_many :topics, -> {order "sticky DESC, replied_at DESC" }, { dependent: :destroy } do
  def first
    @first_topic ||= find(:first)
  end
end

这段代码似乎工作正常。

最新更新