« Singleton Resourcesが実装された | メイン | Rails勉強会@東京 第13回&忘年会 »

2006年12月15日 (金)

URIにidを使いたくない [テクニカル]

Railsでmap.resourcesを使っているとURIが /users/1 とか /articles/99 って感じになる。

でも、URIに数字のid使うのダセeeeeeeeeeeee
/users/tkawa みたいにユニークな文字列が使いたい!!!!
ってことがあるはず。(そもそも内部的な値であるはずのidをURIに使っていいのかという議論もある)

そこでルーティングのidの部分を差し替えられるコードを簡単に書いてみた。

使い方

idの代わりにnameというカラムを使う場合、このように書く。

map.resources :users, :id => "name"

これで例えば GET /users/tkawa というリクエストがあった場合、{ "controller" => "users", "action" => "show", "name" => "tkawa" } というパラメータが渡される。よってfindするときはUser.find_by_name(params[:name])とすればOK。

ただし、ヘルパーメソッドはなぜかuser_path(@user)って書くとうまく動かないので、user_path(@user.name)としなければならない。

でもこれで「URIにはユーザ名を使いたい!」とか「Wiki作るからURIにはページ名使えなきゃ困る!」ってときもバッチリ。

コード

プラグインでもenvironments.rbに直接書き込みでもお好きなようにどうぞ。ってか公開svnレポジトリ作らないとなー。

ActionController::Resources::Resource.module_eval do
  def id
    @options[:id] || "id"
  end
  def member_path
    @member_path ||= "#{path}/:#{id}"
  end
  def nesting_path_prefix
    @nesting_path_prefix ||= "#{path}/:#{singular}_#{id}"
  end
end

投稿者 4bit : 2006年12月15日 19:23 このエントリーを含むはてなブックマーク

トラックバック

このエントリーのトラックバックURL:
http://www.4bit.net/x/mt/mt-tb.cgi/157

このリストは、次のエントリーを参照しています: URIにidを使いたくない:

» [rails][Task Player]URIにidを使いたくない from winplusの日記
そのままです。で、そのままの記事があります。 ぶろぐ。@4bit.net: URIにidを使いたくない Task Playerではこの方法で、playe... [続きを読む]

トラックバック時刻: 2008年11月03日 12:43

コメント

コメントしてください




保存しますか?