ruby v2.3.0p0 で rails 4.2.0 を使用する
ほとんどの検索で大文字と小文字が区別されず、毎回完全なテーブル検索を実行する必要がないため、大文字と小文字を区別しないインデックスを作成したいと考えています。
したがって、私の create_table 移行では、次のような行を追加してみます。
add_index :events, :name, :COLLATE => :NOCASE
移行すると、次のようになります。
== 20150515163641 CreateEvents: migrating =====================================
-- create_table(:events)
-> 0.0018s
-- add_index(:events, :submitter, {:COLLATE=>:NOCASE})
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
Unknown key: :COLLATE. Valid keys are: :unique, :order, :name, :where, :length, :internal, :using, :algorithm, :type
SQLITE3 と rails を使用して移行ファイルに大文字と小文字を区別しないインデックスを作成するにはどうすればよいですか?
アップデート - - - - - - - - - - - -
Anthonyの助けのおかげで、Rails は Sqlite3 コードで照合/照合をまだサポートしていないことがわかりました。
そこで、Rails が生成する構文に基づいて移行で手動で記述しようとしましたが、collate オプションが追加されました。
execute("CREATE INDEX 'index_events_on_name' ON 'events' ('name' COLLATE NOCASE);")
Sqlite3 によると、これにより適切にインデックスが作成されますが、もちろん Schema.rb は間違っています。
さらに重要なことに、検索時に大文字と小文字を区別しない比較を行っているようには見えません。
Event.where("name == ?",name)
Event.find_by_name(name)
作成したインデックスをレールに使用させるにはどうすればよいですか?