Rails 3基于格式和子域的路由约束

时间:2012-10-18 11:03:26

标签: ruby-on-rails ruby-on-rails-3 routing rails-routing

这是我的方案

  • 我有一个作为资源路由的瓶子模型
  • 我有一个子域“foo”

我的要求如下

  • 通过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#showparams[: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'

0 个答案:

没有答案