这是我的方案
我的要求如下
通过html格式向/ bottles / *提供“www”或无子域名的请求应重定向到/bottles/*whateve
r到“子”子域
通过html格式向/bottles/*whatever
发送带有“foo”子域名的请求应直接转至/ bottles / *,无需任何重定向
/bottles/*whatever
使用“www”或通过json格式制作的子域名的任何请求shoudl直接转至/ bottles / *,无需任何重定向
通过json格式向/bottles/*whatever
发出带有“foo”子域名的请求应该直接转到/ bottles / *,无需任何重定向
这是我的routes.rb
scope :constraints => lambda{|req| ((req.subdomain =="" || req.subdomain=="www") && req.format == "html") } do
match "/bottles/*whatever" => redirect{|p,req| URI.parse(req.url).tap { |x| x.host = "foo.#{x.host}" }.to_s}
match "/bottles/" => redirect{|p,req| URI.parse(req.url).tap { |x| x.host = "foo.#{x.host}" }.to_s}
end
resources :bottles
重定向部分受到限制,以确保我们只有重定向,如果我们有“”或“Www”子域,格式为html,否则直接使用resources :bottles
。
以上情况完全符合以下情况
me.com/bottles/*whatever with
html被重定向到sub.me.com/bottles/*whatever
sub.me.com/bottles/*whatever
,html直接路由到sub.me.com/bottles/*whatever
sub.me.com/bottles/*whatever
,json直接路由到sub.me.com/bottles/*whatever
但在以下情况下失败
me.com/bottles/*whatever
的 json
未按预期重定向但会弄乱我的params
,/bottles/1
应该与resource :bottles
匹配并带我使用bottles#show
转到params[:id]=1
,但是我bottles#show
带params[:whatver] = 1
,为什么我将id
参数放在whatever
字段中?当它从未被重定向并且从未匹配约束部分内的路线时..任何想法,下面的一些服务器日志
在2012-10-18 15:55:49 +0500开始获取127.0.0.1的“/bottles/1.json” 由BottlesController处理#显示为JSON 参数:{“whatever”=>“1”} 在1毫秒内完成500内部服务器错误
ActiveRecord :: RecordNotFound(无法找到没有ID的瓶子): app / controllers / bottles_controller.rb:16:在'show'