提取唯一不区分大小写的值

时间:2014-06-11 16:04:37

标签: ruby-on-rails ruby

我在一些领域使用jQuery自动完成功能。它调用了这个方法:

def index
    @schools = School.order(:name).where("name like ?", "%#{params[:term]}%").limit(10)
    render json: @schools.map(&:name)
end

最初我没有很好地处理区分大小写,所以在不同情况下我有一些重复的名称(即“Rutgers”和“rutgers”。

我想更改上面的方法只返回唯一值,忽略大小写,因此只返回一个“Rutgers”结果。

我要清理数据库,但快速解决这个问题会很棒!

1 个答案:

答案 0 :(得分:1)

我想这取决于您使用的是哪个数据库,但您可以尝试这样做:

def index
  @school_names = School.order("lower(name)")
                        .where("name ilike ?", "%#{params[:term]}%")
                        .distinct.limit(10).pluck("lower(name)")
  render json: @school_names.map(&:downcase)
end

以上将适用于POSTGRESQL,对于Sqlite,这将起作用:

def index
  @school_names = School.order("lower(name)")
                        .where("lower(name) LIKE lower(?)", "%#{params[:term]}%")
                        .distinct.limit(10).pluck("lower(name)")
  render json: @school_names.map(&:downcase)
end