所以,我试图不考虑大小写从 DataMapper 订购我的结果。现在,我会做类似 Item.all(:order => :artist)
的事情。我尝试执行 Item.all(:order => "LOWER(artist)")
,但我只是收到一个错误,指出 LOWER(artist)
不是项目
。是否有使用 DataMapper 执行此操作的好方法?
最佳答案
DataMapper 可能不支持排序子句中的原始 sql。 https://github.com/datamapper/dm-core/pull/11有更多信息。如果您真的需要它,您可以将该补丁应用于您的 DataMapper 版本。
即使 DataMapper 确实支持它,您也需要 lower(artist) 的索引来提高排序效率。
您可能想要做的是对艺术家列使用 postgresql citext 数据类型。它提供不区分大小写的搜索和排序。 http://www.postgresql.org/docs/9.1/static/citext.html
如果你有幸使用 postgresql 9.1,下面的应该很好用。如果您使用的是 < 9.1,则需要以不同方式加载 citext 模块,postgresql 文档应该向您展示如何操作。
create extension citext;
create table test (
name citext
);
insert into test values ('a'), ('b'), ('X'), ('m'), ('D');
select * from test order by name;
name
------
a
b
D
m
X
关于ruby - 如何使用 Postgres 在 DataMapper 中进行不区分大小写的排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9205270/