ruby - 如何使用 Postgres 在 DataMapper 中进行不区分大小写的排序?

标签 ruby postgresql datamapper

所以,我试图不考虑大小写从 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/

相关文章:

ruby - 解释 Ruby 的 Kernel::system 方法的附加参数

ruby-on-rails - LoadError : dlopen(digest/sha1. bundle):找不到符号:_rb_Digest_SHA1_Finish

ruby-on-rails - 处理时间不同于日期时间

sql - 如何 UNNEST、GROUP 和 JOIN 数组?

java - 用于不同属性的 DynamoDB Mapper 框架

ruby - Watir 尝试匹配版权声明时出错

ruby-on-rails - 真实性 token 仅在 React 组件中提交表单后设置,这会在 Rails 中引发错误

sql - 如何在 PostgreSQL 9.3+ 中查询和索引嵌套多层的 JSON 数据?

ruby - 复杂的 DataMapper 查询关联

php - 数据映射器模式、异常和处理用户提供的数据