我有一小行代码,我正在尝试在模型文件中从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
这段代码似乎工作正常。