0

Ruby on Rails を使用しています。ユーザー名をデータベースに保存したいのですが、それらを抽出するときに、入力したときと同じ大文字にする必要がありますが、大文字と小文字を区別しない検証を追加して、同じユーザー名を取得できないようにしたいと考えています。大文字化。

これは、すべてのデータベース アダプターが大文字と小文字を区別するインデックスを使用しているわけではないため、データベースに保存する前にユーザー名を小文字にする必要があるためです。

したがって、モデルの検証は次のようになります。

uniqueness: { case_sensitive: false }

どうすればこれを行うことができますか?

4

2 に答える 2

1

いくつかのアプローチが思い浮かびます。

簡単

あなたが行っているように、大文字と小文字を区別するモデルレベルの検証を行うことができ、単にデータベース内の一意性を検証しません。

醜い

または、データベース レベルの検証を主張する場合、データベースに依存しないダーティな方法は、検証に使用される別のフィールドを持つことです。

add_column :users, :uppercase_username, :string, unique: true

class User
  def username=
    @username = value
    uppercase_username = value.upper
  end
end 

驚くばかり

独自のインデックス関数を定義できます(データベース固有の場合があります)。

于 2013-10-28T23:58:05.500 に答える