1

Rails URL のパラメーターとホスト名をきれいな方法で選択的に置き換える方法はありますか?

バックグラウンド:

<link rel="canonical" href="http://...">現在のページが標準的でない場合 (例: URL に余分なパラメーターが存在する、またはホスト名が のような i18n サブドメインである可能性があるes.mysite.com)の場合、アプリでリンクを生成する必要があります。

url_for(params.except(:foo))パラメータをきれいに削除するために使用できるのが好きです。これは、私のルートを賢く利用して URL を正しく変更しているように思えます。これは、将来 URL やパラメーターが変更されたときに破損を防ぐための最も確実な方法だと思います。

しかし、ホスト名を修正するために、文字列レベルで操作して正規表現を使用する以外に、 (たとえば)es.mysite.comに直接置き換えて直接置き換えるためのきれいな方法がわかりません。mysite.com

文字列を手動で解析するのは世界の終わりではありませんが、次のような方法があることを知って喜んでいます:url_for(params.except(:foo), with_host: "mysite.com")

4

1 に答える 1

2

URL を操作するには、Ruby の組み込みURIモジュールまたはAddressable::URI gem のいずれかを調べます。どちらも、URL をバラバラにして再構築することができます。

これは、Addressable::URI を使用した IRB の小さな例です。

irb(main):001:0> require 'addressable/uri'
=> true
irb(main):002:0> uri = Addressable::URI.parse(
irb(main):003:1*       "http://example.com/a/b/c/?one=1&two=2#foo"
irb(main):004:1>   )
=> #<Addressable::URI:0x80c1561c URI:http://example.com/a/b/c/?one=1&two=2#foo>
irb(main):005:0> uri.query_values
=> {"one"=>"1", "two"=>"2"}
irb(main):006:0> uri.query_values={'one'=>2,'two'=>1}
=> {"one"=>2, "two"=>1}
irb(main):007:0> uri
=> #<Addressable::URI:0x80c1561c URI:http://example.com/a/b/c/?one=2&two=1#foo>

ホストへの対処方法は次のとおりです。

irb(main):008:0> uri.host
=> "example.com"
irb(main):009:0> uri.host = 'foo.com'
=> "foo.com"
irb(main):010:0> uri
=> #<Addressable::URI:0x80c1561c URI:http://foo.com/a/b/c/?one=2&two=1#foo>

URI は組み込みで正常に動作しますが、多少古くなっています。Addressable は RFC に準拠しており、非常に強力でフル機能です。

于 2012-06-23T22:53:40.530 に答える