我已经开始将Rails 4应用程序从SQLite迁移到PG(PostgreSQL)。我有很多用于排序的范围(例如:范围:default_order, - > {order(:name)})我合并以在控制器中订购我的记录。
PG,当我这样做时:
User.joins(:shipments, :person).merge(Person.default_order).distinct
它抱怨说:
ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
我的所有作用域都被很好地封装了但是现在,似乎我需要手动编写select子句(使用DISTINCT并深入到模型中以选择正确的排序列...就像这个答案:https://stackoverflow.com/a/1717152/178266)。这对我来说听起来不对。
我试图在订购范围内“添加”选择(以保持其封装,例如:.select(arel_table [:weight]))但它不起作用。
具有讽刺意味的是,我已经使用Rails 3.2将所有手动选择(“DISTINCT ...”)语句迁移到ActiveRecord.uniq,但看起来我需要在另一个方向重新执行它! / p>
除非有人有好的建议......
PS:我现在看到的唯一解决方法是丑陋:
User.joins(:shipments, :person).merge(Person.default_order).select('DISTINCT(users.*), people.name')