sqlite3 auf Schienen: create_table using collate nocase
Verwenden von Rails 4.2.0 mit Ruby v2.3.0p0
Ich möchte Indizes erstellen, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird, da bei den meisten meiner Suchvorgänge die Groß- und Kleinschreibung nicht berücksichtigt wird und nicht jedes Mal eine vollständige Tabellensuche durchgeführt werden muss.
So versuche ich in meinen create_table-Migrationen, Zeilen hinzuzufügen, wie zum Beispiel:
add_index :events, :name, :COLLATE => :NOCASE
Und wenn ich migriere bekomme ich:
== 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
Wie kann ich mithilfe von SQLITE3 und Rails einen Index erstellen, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird?
UPDATE ------------------------
Dank an Anthony 's Hilfe, ich sehe, dass Rails Collate / Collation im Sqlite3-Code noch nicht unterstützen.
So habe ich versucht, es in meiner Migration manuell zu schreiben, basierend auf der Syntax, die Rails generieren würde, aber mit der hinzugefügten Sortieroption:
execute("CREATE INDEX 'index_events_on_name' ON 'events' ('name' COLLATE NOCASE);")
Dies erstellt den Index gemäß Sqlite3 ordnungsgemäß, aber die Datei Schema.rb ist jetzt natürlich falsch.
Und was noch wichtiger ist, es scheint immer noch keine Vergleiche zwischen Groß- und Kleinschreibung zu geben, wenn ich suche:
Event.where("name == ?",name)
Event.find_by_name(name)
Wie kann ich Rails davon überzeugen, den von mir erstellten Index zu verwenden?