[英]Case-sensitive ids when routing in Rails
我正在嘗試在Rails應用程序中實現虛榮URL系統。 在localhost:3000服務器上,該實施工作正常。 我有一個系統,在該系統中可以通過名稱來請求配方,但是如果通過ID請求,也可以使用默認行為。 不論名稱實際被另存為什么,此實現對於大小寫名稱均適用。
例如
http://localhost:3000/recipes/pizza
和
http://localhost:3000/recipes/Pizza
即使記錄被保存為“ Pizza”,也將導致相同的頁面。
如:
http://www.test-server.com/recipes/pizza
和
http://www.test-server.com/recipes/Pizza
將不會顯示同一頁面。
我的問題是,為什么在我的本地主機服務器上忽略大小寫。 而且,是否可以在在線實施中解決此問題?
這是一些有關我目前如何實現個性網址的相關代碼。
#models/recipe.rb
def to_param
name.parameterize
end
# relevant code from routes.rb
match '/recipes/:name' => 'recipes#show'
# relevant code from controllers/recipe_controller.rb
def show
name = params[:id].gsub("-", "\s")
@recipe = Recipe.find_by_name(name)
@recipe = Recipe.find(params[:id]) if @recipe.nil?
puts @recipe.ingredients.inspect
puts @recipe.amounts.inspect
respond_to do |format|
format.html # show.html.erb
format.json { render json: @recipe }
end
end
任何見解將不勝感激。
比較字符串的方式取決於用於列的排序規則(可以在每個表或每個列級別上設置(如有必要))。
MySQL默認情況下使用不區分大小寫的排序規則,但是,如果您的本地數據庫和生產數據庫具有不同的默認設置,而您未明確指定排序規則或字符集,則可能會在生產中使用不同的排序規則( show create table foo
can向您展示表的列使用什么排序規則)
如果您在heroku上運行,那么除非您已花錢購買提供mysql db的插件,否則您將使用postgres,而postgres將默認進行區分大小寫的比較。 順便說一下,Heroku不會做任何“翻譯”,只是activerecord知道如何處理postgres。 不可避免地會忽略數據庫之間有時細微的差異,因此強烈建議您在本地使用與將要部署到的數據庫相同的數據庫。
正如Frederick所寫,Heroku上的PostgreSQL區分大小寫。
我建議您確保數據庫中所有可搜索的關鍵字均為小寫(例如:pizza和NOT Pizza)。 然后,您可以使用此小工具自動將URL的路由部分變為小寫:
https://rubygems.org/gems/route_downcaser
/卡斯滕
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.