起動まで一気に

吉見和也(Kazuya Yoshimi) 2007-12-08 11:47:11

ついにRails2.0がリリースされました。しかもすでに2.0.1。もうgemからインストールもできるようになっているようなので、後で遊んでみようと思ってます。

さて、今週は一つサービスのリリースがあったので間があいてしまいましたが、前回の続き、コントローラーの説明です。toytterはrails1.2ですので、これからrailsやろうと思ってる人には意味ないっぽいので基本的な説明は省いちゃいます。


  def update

    Status.create :user_id => current_user.id, :desc => params[:desc]

    redirect_to "/"

  end

  def add

    user = User.find_by_login params[:id]

    Friendship.create :user_id => current_user.id, :friend_id => user.id

    redirect_to "/#{user.login}"

  end

  protected

  def friend?

    !!Friendship.find_by_user_id_and_friend_id(current_user.id, @user.id)

  end

基本の説明を省いたら書くことがなくなりました。updateは書き込みを実行、addは他人をfollowする。friend?は他人のページを見ている時に、その人が友達かどうかをtrue/false(友達ならtrue)で返します。

もう一気に最後のviewまで行っちゃいます。

app/views/user/show.rhtml


Name: <%= @user.login %>

<% if @user == current_user -%>

<% form_tag :action => "update" do -%>

  <%= text_field_tag "desc" %>

  <%= submit_tag "update" %>

<% end -%>

<% elsif !friend? -%>

<%= link_to "add", :action => "add", :id => @user.login %>

<% end -%>

Status

<% for s in @statuses -%>

<%= s.created_on.to_s(:db)%> : 

<%= h s.user.login %> : 

<%= h s.desc %>

<% end -%>

Friends

<% for f in @user.friends -%>

<%= link_to f.login, f.login %>

<% end -%>

Followers

<% for f in @user.followers - @user.friends -%>

<%= link_to f.login, f.login %>

<% end -%>

ごちゃごちゃしちゃうのでbrタグは抜いてあります。冒頭のif文が汚くてキモイですけど、自分のページなら書き込むためのフォーム、他人で友達じゃなければ友達追加のリンクを表示しています。

その後は、@statusesに入れておいた書き込み一覧をfor文でまわして表示。友達一覧も同じくfor文。

最後に自分をfollowしている人の一覧。twitterにならって、相互にfollowしあっている時は、followには表示させないのでfollowersからfriendsを引いています。でも本番でこんなことしたら、ソースレビューでぼこられますのでご注意を。ActiveRecordは便利なんですが、よく考えずに使うと裏側で大量のクエリを発行してたり、全件ロードしていたりと恐ろしいことになっちゃうので、計画的なご利用をおすすめします。

全てのコードを書き終えたら、コンソールに戻って、


$ rake db:migrate

$ ./script/server

データベース上にテーブルを作成し、サーバーを起動してくれます。あとはhttp://localhost:3000にアクセスすると今まで作ったものが見れます、と

これで10分。説明に何ヶ月?時期を逸するとつらい...

とりあえずこれでtoytterの説明は終わりですが、ご質問などあればお気軽にお寄せください。

次回からは、うちの現場の様子とか、ちょっと実践的なこととか書いていこうかと思います。

押忍

※このエントリはZDNetブロガーにより投稿されたものです。朝日インタラクティブ および ZDNet編集部の見解・意向を示すものではありません。

SpecialPR

  • ビジネスの継続的な成長を促す新たなITのビジョン

    多くの企業においてITに求められる役割が、「守り」のコスト削減から「攻め」のビジネス貢献へとシフトしつつある。その中でIBMが提唱する新たなビジョンEnterprise Hybrid ITとは?

  • デジタル変革か?ゲームセットか?

    デジタルを駆使する破壊的なプレーヤーの出現、既存のビジネスモデルで競争力を持つ
    プレイヤーはデジタル活用による変革が迫られている。これを読めばデジタル変革の全体像がわかる!