Hatena::Diary

篳篥日記 このページをアンテナに追加 RSSフィード

2008-11-17 Railsで作るTwitterもどき(2)

[] Railsで作るTwitterもどき (URL設計編) 01:22  Railsで作るTwitterもどき (URL設計編) - 篳篥日記 のブックマークコメント

Railsで作るTwitterもどき

でモデルができたので、今回はURL設計について考えてみようと思う。

http://twitter.com/ユーザID みたいなURLアクセスすると、その人の発言が読める、というのを実現するために考えておく。


TwitterURLを眺めてみて、URLとアクションの関係は以下のようなことになってる事が分かった。

ドメイン以下のパスアクションログイン
/home自分のホーム。発言可能
/friends自分がフォローしている相手の一覧
/followers自分をフォローしている相手の一覧
/public_timelineみんなの発言一覧×
/ユーザIDその人の発言一覧×
/ユーザID/friendsその人がフォローしている相手の一覧
/ユーザID/followersその人をフォローしている相手の一覧
/ユーザID/status/IDその人の発言(個別)×
/ユーザID/favouritesその人のお気に入り一覧×

これを見て分かる事は、home, friends, followers, public_timelineは、予約語的になっていて、ユーザIDとして使えないということ。ログイン前にこれらのURLを直打ちすると、ログイン画面に飛ばされる。


ということで、この通りのURLが使えるようにしてみる(こちらは、つぶやきモデルをTweetにしちゃったので、若干その辺違うけど)。

config/routes.rbを編集する。

ActionController::Routing::Routes.draw do |map|
  map.resources :users
  map.resource :session

  # 中略

  map.signup '/signup', :controller => 'users',    :action => 'new'
  map.login  '/login',  :controller => 'sessions', :action => 'new'
  map.logout '/logout', :controller => 'sessions', :action => 'destroy'

  # 以下を追加

  map.home      'home',      :controller => 'members', :action => 'home'
  map.friends   'friends',   :controller => 'members', :action => 'friends'
  map.followers 'followers', :controller => 'members', :action => 'followers'
  map.timeline  'public_timeline', :controller => 'tweets', :action => 'list'

  map.connect ':user',           :controller => 'members', :action => 'show'
  map.connect ':user/friends',   :controller => 'members', :action => 'friends'
  map.connect ':user/followers', :controller => 'members', :action => 'followers'
  map.connect ':user/tweet/:id', :controller => 'tweets',  :action => 'show'
  map.connect ':user/favorites', :controller => 'tweets',  :action => 'favorites'

  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end

最初の二つは、restful_authenticationプラグインが付加したもの(map.resourceの設定)。

最後の二つは、デフォルトで定義されるもの。


はじめに特別なURLである、home, friends, followers, public_timeline を定義する。これらは名前付きrouteにしておいた。それぞれ home_path, friends_path, followers_path timeline_path とするとURLに展開される。

次にユーザIDが入るようなrouteを定義する。ユーザIDの部分は ":user" と書いておく事で、コントローラから params[:user] で引き出せるようになる。


ちなみに、/login, /logout, /signup などのURLを使いたい場合には、これらの指定より上に書いておかなければいけない。


それと、ここではroutes の指定と一緒に、コントローラ名とアクションもおおまかに決めてしまった。

コントローラは、ユーザにまつわる処理を行う Membersコントローラ(Usersは、ユーザ登録に使うので使用不可)と、つぶやき関連の表示を担うTweetsコントローラの二つにした。

例えば、Membersコントローラの homeアクションで、自分のホームを表示するための処理を行う。

$ rake routes

と打てば、設定したroutesの一覧が確認できるはずだ。


URLも決まり、(実装前だが)コントローラ名とアクション名も大体決めたので、次回はコントローラ編にしようと思う。

Railsで作るTwitterもどき (3)に続く。