我在一些领域使用jQuery自动完成功能。它调用了这个方法:
def index
@schools = School.order(:name).where("name like ?", "%#{params[:term]}%").limit(10)
render json: @schools.map(&:name)
end
最初我没有很好地处理区分大小写,所以在不同情况下我有一些重复的名称(即“Rutgers”和“rutgers”。
我想更改上面的方法只返回唯一值,忽略大小写,因此只返回一个“Rutgers”结果。
我要清理数据库,但快速解决这个问题会很棒!
答案 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