Mit Schienen 4.2.0 mit Ruby v2.3.0p0sqlite3 auf Schienen: create_table collate mit nocase
Ich möchte Indizes erstellen, die Fall sind unempfindlich, da die meisten meiner Suche Fall sind unempfindlich und ich will nicht zu müssen jedes Mal eine vollständige Tabelle suchen.
Also in meinem create_table Migrationen, versuche ich Zeilen hinzufügen, wie:
add_index :events, :name, :COLLATE => :NOCASE
Und wenn ich wandern erhalte 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 einen Groß- und Kleinschreibung Index in meiner Migration erstellen Dateien mit SQLITE3 und Rails?
UPDATE ------------------------
Dank Anthony ‚s Hilfe, ich sehe, dass Schienen nicht collate unterstützt das/Sortierung im Sqlite3-Code noch nicht.
Also versuchte ich es manuell in meiner Migration auf die Syntax basiert schreiben, die Rails generieren würde, aber mit der Sortierfunktion hinzugefügt:
execute("CREATE INDEX 'index_events_on_name' ON 'events' ('name' COLLATE NOCASE);")
Damit wird der Index ordnungsgemäß erstellt, nach Sqlite3, aber das Schema. rb ist jetzt natürlich falsch.
Und was noch wichtiger ist, es scheint immer noch nicht Groß- und Kleinschreibung Vergleiche zu tun, wenn ich suche:
Event.where("name == ?",name)
Event.find_by_name(name)
Wie überzeugen wir Schienen um den Index zu verwenden ich geschaffen?
Mögliche doppelte: http://stackoverflow.com/questions/7948501/case-insensitive-unique-index-in-rails-activerecord –