这是我的场景
- 我有一个作为资源路由的瓶子模型
- 我有一个子域“foo”
我的要求如下
通过 html 格式对 /bottles/* 的任何带有“www”或没有子域的请求应重定向到
/bottles/*whateve
r 到“sub”子域通过 html 格式对“foo”子域发出的请求
/bottles/*whatever
应该直接转到 /bottles/*whatever 而无需任何重定向任何
/bottles/*whatever
通过 json 格式发出的带有“www”或没有子域的请求都应该直接转到 /bottles/*whatever,而无需任何重定向通过 json 格式对“foo”子域发出的请求
/bottles/*whatever
应该直接转到 /bottles/*whatever 而无需任何重定向
这是我的路线.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
withjson
没有按预期重定向,但它弄乱了我的params
,/bottles/1
应该匹配resource :bottles
并带我去bottles#show
withparams[:id]=1
,但它带我去bottles#show
withparams[:whatver] = 1
,为什么它将我的id
参数放在whatever
字段中?当它从未被重定向并且从未匹配约束部分内的路由时..任何想法,下面的一些服务器日志在 2012-10-18 15:55:49 +0500 开始 GET "/bottles/1.json" for 127.0.0.1 由 BottlesController#show as JSON 参数处理:{"whatever"=>"1"} 完成 500 内部服务器1ms 内的错误
ActiveRecord::RecordNotFound(找不到没有 ID 的瓶子):app/controllers/bottles_controller.rb:16:in `show'