0

私は次のようなものを持っています:

class User
  include DataMapper::Resource

  property :id, Serial
  property :username, Text
end

ユーザー名の大文字と小文字を区別して、ユーザーが好きなようにユーザー名を作成できるようにします。大文字と小文字を区別しない方法でユーザー名を検索する最良の方法は何ですか?

「TestUser」という名前のユーザーを作成した場合、次のような方法でアクセスできるようにしたい

User.first(:username => 'testuser')

私は、validates_with_method を使用して、インデックス作成用のユーザー名プロパティの小文字バージョンを作成する username_downcased プロパティを作成することを考えましたが、それを機能させるのに問題がありました。

4

1 に答える 1

0

少し苦労した後、解決策を見つけましたが、それが最善の解決策であるとしたら、非常に驚​​くでしょう。

class User
  include DataMapper::Resource

  property :id, Serial
  property :username, Text
  property :username_lower, Text

  validates_with_method :lower_username
  validates_uniqueness_of :username_lower, :message => 'Username is already taken'

  def lower_username
    self.username_lower = self.username.downcase
    true
  end

end

大文字と小文字を区別する名前はユーザー名に格納されますが、大文字と小文字を区別しないインデックス作成は username_lower で実行できます。

于 2012-08-24T17:12:48.563 に答える