ユーザ情報のビューを作成

app/views/index.rhtml を編集し、次のようにします。ログインした状態で http://localhost:3000/user/ を見ながら、どんどん書いていきます。発言内容のフォームもまだ機能しませんが、書きます。

<div id="left">

<!--表示対象のユーザがログイン中のユーザの場合のみ、発言用のフィールドを表示-->
<% if current_user == @user %>
  <div id="update_status">
  <p><% form_for :status, :url => { :controller => :status, :action => :new } do |f| %>
    <p><label for="status">めっせーじ?<small>(140文字以内)</small></label><br>
    <%= f.text_area :status, :cols => 70, :rows => 4 %><br>
    <%= submit_tag "送信" %></p>
  <% end %></p>
  </div>
<% end %>
<!--ここまで-->

<b><hr></b>


<!--対象ユーザの過去の発言内容を表示-->
<% @user.statuses.reverse.each do |s| %>
<%= image_tag('person.png', :size => "32x32", :id => "user_icon", :align => "left") %>
<strong><%= @user.login %></strong> <%= s.status%> <small>(<%= s.updated_at,to_s %>)</small>

<hr style="clear:left">
<% end %>

</div>
<!--ここまで-->

<div id="right">

<!--ユーザ情報の表示-->
<%= image_tag('person.png', :size => "64x64", :id => "user_icon") %>
<strong><%= h @user.login %></strong><br>
<%= link_to(image_tag("mail.png"), "mailto:" + h(@user.email)) %><br>
<b>プロフィール:</b> <%= h @user.profile %>
<hr>
<!--ここまで-->


</div>

全体構成

二つのdivから成り立っています。
id="left"の方は左側に表示する大きめの枠で、発言用のボックスや、過去の発言が入る枠。
id="right"は右側の小さな枠で、ユーザのプロフィールなどの情報などを表示する枠。

発言用のフィールド

発言用のフィールドは、自動生成されたログイン用のフォームを物まねして、とりあえず書いておきます。コントローラを書いていないので、今のところ送信してもエラーになるだけです。
form_forの使い方はこの辺を参考に。モデルの新しいインスタンスを作るときに使うと良いようです。

過去の発言

ここでは、対象ユーザの過去の発言を @user.statuses で取得し、その内容を逆順に表示しています。user.statuses なんて定義したっけ?と思われるかもしれませんが、モデル作成時にUserモデルにhas_many: :statuses を書いておいたことで自動生成されています。自動的にStatusのuser_idが @user.id と一致するものを検索してくれます。発言時刻はRailsがupdated_atとかcreated_atに記録してくれているので、それを参照すればOK。よくできてるなあ。

ユーザ情報

@userのプロフィールなどを表示しています。ここが一番シンプル。

見た目はCSS

あわせて、ユーザアイコンの画像を配置したり、CSSを適宜書いておきます。以上で、見た目的には下のような感じになりました。


ここまでのソース

monologue_001.tar.bz2