當用戶註冊我的應用程序以查看用戶名是否已存在時,我正在進行ajax驗證。無論何時您對用戶名字段進行解鎖/模糊處理,都會提出請求。本地我使用的是MySQL,在Heroku上是Postgres,所以我假設問題出在那裏,因爲它在我的開發機器上完全在本地運行。MySQL/Postgres之間的區分大小寫問題
註冊的用戶名是馬特例如...
發展:
- 馬特=採取的是真實的
- 亞光=採取的是真實的
- MATT =採取的是真實的
- MaTt =採取是真的,等等......
生產:
- 馬特=採取的是真實的
- 亞光=採取的是假
- MATT =採取的是假
- 馬特=採取的是假
這裏是方法(你甚至可以看到我進一步嘗試強制它失敗,再次在本地工作應該如何,但不是在生產中)...
def checkname
scrubb = ActionController::Base.helpers.sanitize(params[:username], :tags => '')
user = User.find_by_username(scrubb, :conditions => [ "lower(username) = ?", scrubb.downcase ])
if user.blank?
render :json => { :isAvailable => true }
else
render :json => { :isAvailable => false }
end
return
end
**編輯* *
這是生成的MySQL查詢的輸出:
SELECT `users`.* FROM `users` WHERE `users`.`username` = 'MATT' AND (lower(username) = 'matt') LIMIT 1
因此,它看起來像真正的問題是,與聲明Rails正在生成。我將如何刪除它?
不知道爲什麼強迫爲小寫不工作,但我會建議反對在開發和生產中使用不同的DBMS--無論框架聲稱如何使所有工作保持一致,總是會有差異,並且您不希望在實時環境中第一次遇到它們。 – IMSoP