This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/32

Ruby on Railsでは、URLのマッピングに関する情報を routes.rbファイルに記述します。これを記述する際に、URLを丸ごとパラメータとして渡したい事があります。例えば、はてなブックマークでは、特定のURLに関するエントリーの情報を参照するためのURLは、こんな感じになります:

http://b.hatena.ne.jp/entry/http://foo.bar.com/

これがdel.icio.usの場合、URLを直接指定するのではなく、md5を使ったダイジェストを渡すようになっています。URLの規格としては後者の方が正しいアプローチなのですが、アドレス記入欄にURLを手入力する場合や、グリースモンキーから利用する場合を考えると、md5を使わずに済んで楽なので、前者の方法も捨てがたいわけです。

では、これと同じ事をRailsでやるにはどうしたら良いでしょうか。単純に考えると、routes.rbファイルに;

map.connect 'entry/:url', :controller => 'entry', :action => :list

という感じに書けば良さそうです。しかし、実際にこのコードを実行してみると、URLに含まれる'/'がデリミタだと見なされてしまうため、うまく認識してくれません。

最後の'/'より後に続く部分をまとめてパラメータとして捕捉するためには、下記のように記述する必要があります。

map.connect 'entry/*url', :controller => 'entry', :action => :list

こうする事で、params[:url] には ActionController::Routing::PathComponent::Result オブジェクトが渡されます。このオブジェクトの実体は、デリミタ'/'で区切られたパートを保持する配列です。また、to_sメソッドを呼び出す事で、元のURLを再現できるようになっているので、

url = params[:url].to_s

とすると、パラメータとしてURLを丸ごと渡す事ができます。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/32

posted by Png genki on Fri 26 May 2006 at 21:43

Comments:

or Preview
Social Bookmarks
  • Delicious
  • B_entry20
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ