bra*_*rad 52 ruby postgresql ruby-on-rails sql-order-by case-insensitive
我正在将我的开发环境从sqlite3切换到postgresql 8.4并且有最后一个障碍.
在我的原始中,我在辅助方法中有以下行;
result = Users.find(:all, :order => "name collate NOCASE")
Run Code Online (Sandbox Code Playgroud)
这提供了一个非常好的不区分大小写的搜索.我不能为postgresql复制这个.应该很容易 - 任何想法?
谢谢.
Lan*_*ceH 80
result = Users.find(:all, :order => "LOWER(name)")
Run Code Online (Sandbox Code Playgroud)
从布拉德和弗兰克那里得到一点点.
Tho*_*emm 24
LanecH的答案适用于Rails 3+(包括Rails 4和5):
users = User.order('LOWER(name)')
Run Code Online (Sandbox Code Playgroud)
或者创建一个可以重用的命名范围:
class User < ActiveRecord::Base
scope :order_by_name, -> { order('LOWER(name)') }
end
users = User.order_by_name
Run Code Online (Sandbox Code Playgroud)
Mar*_*rez 21
现在使用Rails 5.2,如果使用接受的答案,您可能会收到警告.
DEPRECATION WARNING:使用非属性参数调用的危险查询方法(其参数用作原始SQL的方法):"LOWER(?)ASC".
另一种选择可能是依赖Arel(它现在合并到Rails中):
results = User.order(User.arel_table['name'].lower.asc)
# results.to_sql == "SELECT \"users\".* FROM \"users\" ORDER BY LOWER(\"users\".\"name\") ASC"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19827 次 |
最近记录: |