sqlite3 на рельсах: create_table с использованием collate nocase
Использование rails 4.2.0 с ruby v2.3.0p0
Я хочу создать индексы, которые не чувствительны к регистру, так как большинство моих поисков нечувствительны к регистру, и я не хочу каждый раз выполнять поиск по полной таблице.
Поэтому в моих миграциях 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?
ОБНОВИТЬ ------------------------
БлагодаряЭнтониПомогите, я вижу, что 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)
Как мне убедить рельсы использовать созданный мной индекс?