Rails 3 - 使用Ransack&amp ;;的案例不敏感查询Postgres的

时间:2012-01-12 17:36:11

标签: ruby-on-rails ruby-on-rails-3

My Rails应用使用Ransack gem在多个属性上搜索我的模型。有没有办法让Ransack对Postgres进行不区分大小写的查询?

= search_form_for @q do |f|
  = f.label :name_cont
  = f.text_field :name_cont

  = f.label :code
  = f.text_field :code_eq

= f.submit

2 个答案:

答案 0 :(得分:2)

Posgres使用ILIKE进行不区分大小写的查询。

来自github上的spovich:

  

LIKE vs ILIKE来自ARel,而不是搜身。但是,事实并非如此   看起来像你的问题。

     

您使用:code_eq将生成完全匹配的SQL(例如'where   code =“foo”)因此不能不区分大小写。任何'喜欢'   谓词(_cont,_start,_end)默认生成ILIKE(for   PostgreSQL的)。因此,如果您使用:code_cont将生成ILIKE   声明(例如'where code ILIKE“%foo%”')。查看所有常量   谓词。

     

https://github.com/ernie/ransack/blob/master/lib/ransack/constants.rb

https://github.com/ernie/ransack/issues/57#issuecomment-3472618

答案 1 :(得分:0)

考虑使用matches_any谓词。我在github repo中没有看到任何关于它的文档或规范,但是这个问题讨论了它,https://github.com/ernie/ransack/issues/11