2012-02-09 52 views

回答

2

DataMapper可能不支持排序子句中的原始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 
0

我實際上最終使用了dm-ar-finders。它增加了諸如Item.find_by_sql("SELECT * FROM items ORDER BY LOWER(artist)")之類的東西。只要確保你添加一個索引,無論哪列改變,性能。

相關問題