所以,我试图从DataMapper订购我的结果而不考虑案例。现在,我做了Item.all(:order => :artist)
之类的事情。我尝试过Item.all(:order => "LOWER(artist)")
,但我发现错误LOWER(artist)
不是Item
的属性。使用DataMapper有一个很好的方法吗?
答案 0 :(得分:2)
DataMapper可能不支持orders子句中的原始sql。 https://github.com/datamapper/dm-core/pull/11有更多信息。如果您确实需要它,可以将该补丁应用于您的DataMapper版本。
即使DataMapper支持它,你也需要一个较低的(艺术家)索引来使订购有效。
你可能想要做的是使用艺术家专栏的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
答案 1 :(得分:0)
我实际上最终使用了dm-ar-finders。它增加了Item.find_by_sql("SELECT * FROM items ORDER BY LOWER(artist)")
之类的内容。为了提高性能,请确保在要更改的列上添加索引。