Rails:将PostgreSQL,DISTINCT和ORDER一起使用时保持范围封装

时间:2016-03-15 07:59:46

标签: sql ruby-on-rails postgresql activerecord

我已经开始将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')

0 个答案:

没有答案