Using rails 4.2.0 with ruby v2.3.0p0
I want to create indexes that are case insensitive since most of my searches are case insensitive and I don't want to have to do a full table search every time.
So in my create_table migrations, I try adding lines such as:
add_index :events, :name, :COLLATE => :NOCASE
And when I migrate I get:
== 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
How can I create a case-insensitive index in my migration files using SQLITE3 and rails?
UPDATE ------------------------
Thanks to Anthony's help, I see that rails doesn't support collate/collation in the Sqlite3 code yet.
So I tried writing it manually in my migration based on the syntax that Rails would generate, but with the collate option added:
execute("CREATE INDEX 'index_events_on_name' ON 'events' ('name' COLLATE NOCASE);")
This creates the index properly, according to Sqlite3, but the Schema.rb is now wrong, of course.
And more importantly, it still doesn't seem to be doing case-insensitive comparisons when I search:
Event.where("name == ?",name)
Event.find_by_name(name)
How do I convince rails to use the index I created?