これが私のシナリオです
- リソースとしてルーティングされるボトル モデルがあります
- サブドメイン「foo」があります
私の要件は次のとおりです
/bottles/* へのリクエストは、"www" を含むかサブドメインを含まないものは何でも、html 形式で作成され、
/bottles/*whateve
r から "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 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
withは期待どおりにリダイレクトされませんが、json
my が台無しになり、 withと一致して withに移動する必要がありますが、withに移動します。なぜ、私のパラメーターがフィールドに入れられるのですか? リダイレクトされず、制約部分内のルートと一致しなかった場合..任意のアイデア、以下のいくつかのサーバーログ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 の GET "/bottles/1.json" を開始しました BottlesController#show as JSON パラメータによる処理: {"whatever"=>"1"} 500 内部サーバーを完了しました1ms の誤差
ActiveRecord::RecordNotFound (ID のないボトルが見つかりませんでした): app/controllers/bottles_controller.rb:16:in `show'