ruby-on-rails - sqlite3在 rails 上:create_table使用collat​​e nocase

标签 ruby-on-rails ruby ruby-on-rails-4 sqlite collate

将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在迁移文件中创建不区分大小写的索引?

更新------------------------

感谢Anthony的帮助,我看到Rails尚不支持Sqlite3代码中的归类/归类。

因此,我尝试根据Rails生成的语法在迁移中手动编写它,但添加了collat​​e选项:

execute("CREATE INDEX 'index_events_on_name' ON 'events' ('name' COLLATE NOCASE);")


根据Sqlite3,这将正确创建索引,但是Schema.rb现在当然是错误的。

而且更重要的是,当我搜索时,它似乎并未进行不区分大小写的比较:

Event.where("name == ?",name)
Event.find_by_name(name)


如何说服Rails使用我创建的索引?

最佳答案

看起来索引上的collation尚未被合并:

https://github.com/rails/rails/pull/18499/files

PR顺便增加了对列的排序规则支持。

语法如下:

create_table :foo do |t|
  t.string :string_nocase, collation: 'NOCASE'
  t.text :text_rtrim, collation: 'RTRIM'
end

add_column :foo, :title, :string, collation: 'RTRIM'

change_column :foo, :title, :string, collation: 'NOCASE'

关于ruby-on-rails - sqlite3在 rails 上:create_table使用collat​​e nocase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37878967/

相关文章:

ruby-on-rails - Redis 和 Resque 是否需要从与应用程序相同的目录启动? ( rails )

ruby-on-rails - Rails TimeHelpers travel_to with nanosecond 不工作

ruby-on-rails - 如何使用 Pundit 处理分页?

ruby-on-rails - 为什么运行 Rspec 时会出现未定义方法 'have' 错误?

ruby-on-rails - Rails 错误 : "Undefined method ` call' for "result == false":String"error in create method

ruby - 我可以获取以 grit 发出的 git clone 命令的进度,输出到标准输出吗?

ruby-on-rails-4 - Sidekiq 警告 : uninitialized constant ViewDBWorker Rails 4

javascript - Rails 将请求解析为 html,即使它是 json

ruby-on-rails - 升级到 Rails 4.2.7.1 时有关 sass 处理器的弃用警告

ruby - 合并数组而不丢失原始顺序,ruby