« 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
トラックバック
このエントリーのトラックバック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