1

これが私のシナリオです

  • リソースとしてルーティングされるボトル モデルがあります
  • サブドメイン「foo」があります

私の要件は次のとおりです

  • /bottles/* へのリクエストは、"www" を含むかサブドメインを含まないものは何でも、html 形式で作成され、/bottles/*whatever から "sub" サブドメインにリダイレクトされる必要があります。

  • HTML 形式で作成された「foo」サブドメインへのリクエストは/bottles/*whatever、リダイレクトなしで /bottles/*whatever に直接送信されます。

  • 「www」を使用する、または json 形式で作成されたサブドメインを使用しないリクエストは/bottles/*whatever、リダイレクトせずに /bottles/*whatever に直接送信する必要があります

  • json 形式で作成された「foo」サブドメインへのリクエストは/bottles/*whatever、リダイレクトせずに /bottles/*whatever に直接送信する必要があります

ここに私の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 withhtml にリダイレクトされますsub.me.com/bottles/*whatever
  • sub.me.com/bottles/*whatever直接ルーティングされたhtmlを使用sub.me.com/bottles/*whatever
  • sub.me.com/bottles/*whateverjson を直接ルーティングするsub.me.com/bottles/*whatever

ただし、次の場合は失敗します

  • me.com/bottles/*whateverwithは期待どおりにリダイレクトされませんが、jsonmy が台無しになり、 withと一致して withに移動する必要がありますが、withに移動します。なぜ、私のパラメーターがフィールドに入れられるのですか? リダイレクトされず、制約部分内のルートと一致しなかった場合..任意のアイデア、以下のいくつかのサーバーログparams/bottles/1resource :bottlesbottles#showparams[:id]=1bottles#showparams[:whatver] = 1idwhatever

    2012-10-18 15:55:49 +0500 で 127.0.0.1 の GET "/bottles/1.json" を開始しました BottlesController#show as JSON パラメータによる処理: {"whatever"=>"1"} 500 内部サーバーを完了しました1ms の誤差

    ActiveRecord::RecordNotFound (ID のないボトルが見つかりませんでした): app/controllers/bottles_controller.rb:16:in `show'

4

0 に答える 0