Ruby on rails 3 在Rails3中是否有一种更不依赖数据库的方式来编写这个默认作用域?

Ruby on rails 3 在Rails3中是否有一种更不依赖数据库的方式来编写这个默认作用域?,ruby-on-rails-3,activerecord,database-agnostic,default-scope,Ruby On Rails 3,Activerecord,Database Agnostic,Default Scope,我在我的一个模型中定义了以下默认范围 default_scope order("IF(format = #{FORMATS[:wide]}, 1, 0) DESC, created_at DESC, name ASC") 它在我运行MySQL的开发机器上运行得很好,但在部署到使用postgres的生产环境中时出现了问题。有没有一种方法可以用Arel而不是直接的SQL来编写呢FORMATS[:wide]返回一个整数,但它不能按任何特定顺序。我只想先返回具有特定格式的记录。我根本不会把它放在SQL

我在我的一个模型中定义了以下默认范围

default_scope order("IF(format = #{FORMATS[:wide]}, 1, 0) DESC, created_at DESC, name ASC")

它在我运行MySQL的开发机器上运行得很好,但在部署到使用postgres的生产环境中时出现了问题。有没有一种方法可以用Arel而不是直接的SQL来编写呢
FORMATS[:wide]
返回一个整数,但它不能按任何特定顺序。我只想先返回具有特定
格式的记录。

我根本不会把它放在SQL中。我可能会为每种格式类型创建一个作用域,然后使用Ruby来确定使用哪种格式。或者创建一个确定排序顺序的方法,并将其传递到使用它的任何地方。

谢谢,这很有意义。我总是可以分别选择每种格式,然后按照需要的顺序将它们合并到一个数组中。看起来让DB做它构建时要做的事情会更有效率。