【发布时间】:2012-06-04 02:19:09
【问题描述】:
我正在尝试在我的 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
不会显示相同的页面。
我的问题是,为什么我的本地主机服务器上忽略了大写。而且,在线实施是否可以优雅地解决这个问题?
这是我目前如何实现虚 URL 的一些相关代码。
#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。测试主机托管在 Heroku 上,我知道他们可能正在将 MySQL 转换为 PostreSQL。
-
那是你的问题。 PostgreSQL 区分大小写。在下面的答案中查看我的解决方案。
标签: ruby-on-rails ruby-on-rails-3 url routing