「Ruby on Rails Tutorial」のサンプルアプリをAngularJSとBootstrap3を使う形にして作成します。前回、micropostモデルを作成し、userモデルとの間にアソシエーションを定義し、テストデータを登録しました。今回は、AngularJSのビューでユーザープロファイルページにそのユーザーのマイクロポストを表示します。
1)Railsコントローラを修整
対象ユーザーが保持するマイクロポストをユーザー情報と一緒にJSON形式でリターンします。
$ vi app/controllers/users_controller.rb
def show
user = User.find(params[:id])
gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
microposts = user.microposts
@user_info = {
user: user,
gravatar_url: "https://secure.gravatar.com/avatar/#{gravatar_id}",
microposts: microposts
}
render json: @user_info
end
2)AngularJSビューを修整
サーバーから取得したユーザー情報とマイクロポストの情報を表示します。
$ vi app/assets/templates/users/show.html.erb
<div ng-controller="UsersShowCtrl">
<div class="row">
:
<div class="col-xs-6 col-sm-8">
<h3>Microposts({\{user_info.microposts.length}})</h3>
<ol class="microposts">
<li ng-repeat="mp in user_info.microposts">
<div>{\{mp.content}}</div>
<small class="text-muted">Posted {\{mp.created_at | date:'medium'}}</small>
</li>
</ol>
</div>
</div>
</div>
3)スタイルシートの設定追加
$ vi app/assets/stylesheets/custom.css.scss
/* microposts */
.microposts {
list-style: none;
margin: 10px 0 0 0;
li {
padding: 10px 0;
border-top: 1px solid #e8e8e8;
}
}