55

私は開発環境を sqlite3 から postgresql 8.4 に切り替える過程にあり、最後のハードルが 1 つあります。

私のオリジナルでは、ヘルパーメソッドに次の行がありました。

result = Users.find(:all, :order => "name collate NOCASE")

これにより、大文字と小文字を区別しない非常に優れた検索が提供されました。これを postgresql で複製することはできません。簡単にする必要があります - 何かアイデアはありますか?

ありがとう。

4

5 に答える 5

84
result = Users.find(:all, :order => "LOWER(name)")

ブラッドとフランクの両方から少し取ってください。

于 2010-06-06T12:44:18.820 に答える
29

Rails 3+ (Rails 4 および 5 を含む) に適合したLanecH の回答:

users = User.order('LOWER(name)')

または、再利用できる名前付きスコープを作成します。

class User < ActiveRecord::Base
  scope :order_by_name, -> { order('LOWER(name)') }
end

users = User.order_by_name
于 2014-06-21T09:31:48.347 に答える
6

列をcitextタイプとして保存することを検討しましたか? 私が理解しているように、実際には lower() への呼び出しを内部化するだけです。その後は自動的に行われます。ただし、大文字と小文字を区別して検索する必要がある場合は、これが最善の方法ではない可能性があります。

于 2010-06-06T21:30:45.703 に答える
5

SQL では ORDER BY LOWER(columnname) を使用できますが、Ruby でそれを行う方法がわかりません。関数インデックス ( LOWER(columnname) にもある) は、高速化に役立ちます。

于 2010-06-06T09:57:34.820 に答える