2014-06-11 25 views
0

我在幾個區域使用jQuery自動完成。這使得該方法的調用:提取獨特的不區分大小寫的值

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

起初,我沒有處理的情況下的靈敏度很好,所以我在不同的情況下,一些重複的名稱(即「羅格斯」和「羅格斯」

我。 'd想改變上述方法只返回唯一值,忽略大小寫,所以只返回一個「Rutgers」結果。

我打算清理數據庫,但是爲此快速臨時修復太棒了!

+0

什麼是你的數據庫的名字嗎? –

+0

你想要區分大小寫的搜索權限嗎? –

+0

不區分大小寫。如果有兩個條目:「Rutgers」和「rUtGeRs」,並且用戶搜索「RUTG」,我只想返回單個結果。我在開發中使用SQLite3,生產中使用postgres。 – opticon

回答

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 
+0

'pluck'方法返回一個數組,其餘方法無法使用:P – opticon

+1

請看上面,我在10分鐘前對我的評論做了編輯。爲什麼我不能告訴別人他們的解決方案對我不起作用? – opticon

+0

@opticon因爲,你原來的問題仍然缺乏需要幫助你的信息(如果我不在乎評論)。我在第二次重複後更新了評論。這個答案是從* guess *出來的,那是* Uri *提到的。我們中的許多人不會猜測,但有些人會這樣做。雖然你沒有正確地提出問題,但不要指望其他人也能正確地提出......這就是我的觀點。 –