MVCのCは

2007年11月29日 11:11
トラックバック (0)   コメント (0)

メタボリックのC

前回モデルを作ったので、データベースへのアクセスが出来る様になっています。それをブラウザから送られてくるリクエストで操作できるようにするのが今回説明するコントローラーです。

Toytter作成の流れ
残り時間 動画の時間 内容
07:0003:15account_controller.rb編集
06:4703:28application.rb編集
06:3703:38user_controller.rb編集
06:2303:52homeアクション作成
05:2804:47showアクション作成
04:3805:37updateアクション作成
04:1206:03addアクション作成
03:3306:42friend?メソッド作成

タイムラインでいうと、ここらへんの部分ですね。

■account_controller.rb編集

# Be sure to include AuthenticationSystem in Application Controller instead
include AuthenticatedSystem
# If you want "remember me" functionality, add this before_filter to Application Controller
before_filter :login_from_cookie

冒頭にこんなのが書いてあるので、コメントに従ってこれをApplicationControllerに移します。なので選択してcutしておきます。
ついでに、ログイン後に飛ばされるページが/accountになってるので、

redirect_back_or_default(:controller => '/account', :action => 'index')

という行を
redirect_back_or_default(:controller => '/', :action => 'index')

に書き換えます。
3カ所あるので動画内では一括置換してます。

■application.rb編集

さっきcutしておいたものを、この中に貼付けます。class~endの間ならどこでもいいです。

■user_controller.rb編集

そして実際にユーザーが書き込んだり、友達を追加したりする処理をここに書きます。これらは別の機能なので、実際にはそれぞれにコントローラーを作るんですが、動画では簡素化のために全てここに書いてしまっています。これを実際の開発でやってしまうと恐ろしいことになるので注意です。

before_filter :login_required
helper_method :friend?

before_filterはアクションが実行される前に実行されるメソッドです。ここではacts_as_authenticatedで定義されているlogin_requiredを呼び出しています。これにより、ログインしないでこのコントローラーのアクションにアクセスすると、ログインページに飛ばされることになります。
helper_methodでは、後に記述するfriend?メソッドを、コントローラー内だけでなく、viewでも使えるようにしています。

■homeアクション作成

def home
@user = current_user
@statuses = Status.find(:all, :conditions => {:user_id=>@user.friends.map(&:id)<<@user.id}, :include => :user, :order => "created_on desc", :limit => 50)
render :action => "show"
end

そして、ユーザーのマイページがこれです。ログインしている状態でhttp://host/でアクセスされると、これが実行されます。なんでこれが実行されるのかは、routes.rbで定義してるからですね。
@がつく変数は、後でview内で使用することができます。current_userはacts_as_authenticatedのメソッドで、現在ログインしているユーザーのモデルを返します。自分のページと他人のページで、同じviewファイルを使いたいので、view側で自分なのか他人なのか判断する必要が無いように、@userに常に対象となる人が入るようにしました。
また、マイページでは自分と自分のfollowしている人達の書き込みを一覧表示させたいので、必要なオプションをつけてStatus.findして、@statusesに入れています。
そして最後にこのアクションではshow.rhtmlを使いますよと書いています。

■showアクション作成

def show
redirect_to :action => "home" if current_user.login == params[:user]
@user = User.find_by_login params[:user]
@statuses = @user.statuses.find(:all, :order => "created_on desc", :limit => 50)
end

今度は自分から見た他人のページですね。
1行目で、もし自分がこのアクションを呼んだら、homeアクションにリダイレクトしています。これいらなかったかも
homeアクションで@userには人、@statusesには表示したい書き込みが入ると約束したので、@userには対象となる人をlogin名から、@statusesにはその人が書いた書き込みのみを入れています。
このアクションはshowと名付けられているので、render :actionを指定しなくとも、show.rhtmlが呼ばれます。


ちょっと時間がなくなってしまったので、続きは次回に

押忍

最新エントリー
カテゴリ
月別のアーカイブ
プロフィール
吉見和也(Kazuya Yoshimi)
RAWHIDE.(ローハイド.)取締役兼最高技術責任者。Rubyで開発する心地よさに惚れ、Ruby道を邁進する日々。迷わず行けよ、行けばわかるさ、Ruby道。押忍!
Powered by
 

企画特集

グリーンITの第一歩は見える化ですグリーンITの第一歩は見える化です
経営・財務・情報システムの3つの視点から環境対応を考える
これからの時代のセキュリティ対策これからの時代のセキュリティ対策
くるぞ!in the cloudソリューション
ERPパッケージの導入を成功させるコツERPパッケージの導入を成功させるコツ
成功させるコツをクイズ形式のWebcastで配信中
ZDNet Japan Green ITZDNet Japan Green IT
サミットだけでは終わらせない!エンタープライズの取り組みはこれからだ!
エンタメCGM「gooメーカー☆メーカー」エンタメCGM「gooメーカー☆メーカー」
【第2回】メーカー/占いのコンテンツを作ってみた!
Techno ExchangeTechno Exchange
RackableとCTCの地球にやさしい関係
ココが変わった、新型「ニンテンドーDSi」--「ニンテンドーDS Lite」と比較
任天堂が11月1日に発売する新型ゲーム機「ニンテンドーDSi」はどんな点が新しいのか。既存のニンテンドーDS Liteと比較するとともに、新機能を紹介する。
フォトレポート:本体が分離するNTTドコモの「セパレートケータイ」の謎に迫る
NTTドコモは家電展示会「CEATEC JAPAN 2008」において、端末が2つに分離できる携帯電話「セパレートケータイ」を展示している。どのような仕組みなのか、何ができるのかを、写真で紹介する。
話題のスマートフォン、写真で見るBlackBerry Bold
RIM製スマートフォン「BlackBerry」の新モデル「BlackBerry Bold」を2008年度第4四半期にも発売すると発表したNTTドコモ。話題のBlackBerry Boldを写真で紹介する。