【发布时间】:2016-07-26 09:58:07
【问题描述】:
最近我们不得不通过“分页”来支持我们的网络应用
来自我们数据库的 2 个不同模型(客户、查询)。
假设我们的页面大小为 5,
我们正在对“名字”进行排序。
因此我们以下所有的“排序”操作都将按名字排序
我们的流程使用 Sort 3 次:
- DB 排序 - 客户模型。 DB 返回 5 条记录。
- DB 排序 - 查询模型。 DB 返回 5 条记录。
- 将上述所有记录存储在一个数组中。
- Ruby 排序(使用 sort! 方法)- 按 FirstName 字段对上述 10 条记录进行排序。
- 将前 5 条记录呈现给客户端(排序后)。
我们的问题:
似乎 Postgres 排序和 Ruby 排序对字符串有很大的不同。
例如,Postgres 和 Ruby 对以下单词进行不同的排序。
- w1 = '客户 1'
- w2 = '客户 - 你好'
排序结果:
Postgres:w1,w2
Ruby:w2、w1(相反)。
它在于数字和破折号(-)字符的面部Ruby比较器与Postgres相反。
我们的问题只在于“字符串”的排序。
按日期/整数排序的行为相同(感谢上帝)。
有谁知道是否可以覆盖/配置 Ruby 的排序? 因此我们预期的 Array 排序结果将遵循 Postgres 排序的配置。
【问题讨论】:
-
排序需要一个块,你可以随意排序。
-
没有“Postgres 排序”之类的东西。 postgres 的排序方式几乎不依赖于在特定表/列上设置的排序规则。
-
PostgreSQL 使用操作系统排序规则进行排序。你在你的数据库中得到什么
SHOW lc_collate;?这就是您需要的顺序。 -
@SergioTulentsev 不幸的是,这个特殊的错误赢得了我与它的所有斗争。我到处都这样做。有一次,我在 100 多名客户面前展示了一张幻灯片,上面写着“我们几乎没有做到最好”。
-
我最喜欢的是“我受够了”,当“我吃饱了”(例如,我不能再吃东西了)的意思是:“受够了”的意思是“非常沮丧并且可以“别再忍受了”用美式英语。语言很有趣! @SergioTulentsev
标签: ruby-on-rails arrays ruby postgresql sorting