ログイン済みホームページに自分のマイクロポストを表示
ログイン済みの状態で表示されるホームページには、ユーザープロファイルとマイクロポスト投稿フォームが表示されますが、マイクロポストはまったく表示されていません。
自分のマイクロポストを表示するようにします。
自分のマイクロポストを表示するようにします。
下記資料を参考にして行っています。
参考資料ページの6.参照
●ホームページビューの修正
下記のように自分のマイクロポストを表示する"feed"パーシャルを呼び出す記述を追加します。
ブートストラップの機能を使ってclass="span8"と指定し、右側に表示するようにレイアウトします。
$ vi app/views/static_pages/home.html.erb
●feedパーシャルの作成
$ vi app/views/shared/_feed.html.erb
・@feed_itemsインスタンス変数で、自分のマイクロポストを取得し、マイクロポストを表示します。@feed_itemsは、別途"StaticPagesController"内のhomeアクション内で定義します。
・マイクロポストの詳細な表示内容は、feed_itemパーシャルで設定します。
・マイクロポストはページ化して表示します。
●feed_itemパーシャルを作成
$ vi app/views/shared/_feed_item.html.erb
個々のマイクロポストを表示します。
●コントローラ内で@feed_itemsインスタンス変数を定義
"StaticPagesController"内のhomeアクション内に@feed_itemsインスタンス変数を定義します。
現在ログインしているユーザーに属するマイクロポストを取得します。ページ化するのでpagenateメソッドを使用します。
自分のマイクロポストを取得する処理は、別途userモデル内で"feed"メソッドで定義します。
$ vi app/controllers/static_pages_controller.rb
●userモデルに"feed"メソッドを定義します。
$ vi app/models/user.rb
●マイクロポスト投稿失敗時の処理の修正
マイクロポスト登録失敗時には、@feed_itemsインスタンス変数が必要なので空のインスタンス変数を作成します。
$ vi app/controllers/microposts_controller.rb
参考資料ページの6.参照
●ホームページビューの修正
下記のように自分のマイクロポストを表示する"feed"パーシャルを呼び出す記述を追加します。
ブートストラップの機能を使ってclass="span8"と指定し、右側に表示するようにレイアウトします。
$ vi app/views/static_pages/home.html.erb
<% if signed_in? %>
<div class="row">
<aside class="span4">
<section>
<%= render 'shared/user_info' %>
</section>
<section>
<%= render 'shared/micropost_form' %>
</section>
</aside>
<div class="span8">
<h3>マイクロポストフィード</h3>
<%= render 'shared/feed' %>
</div>
</div>
●feedパーシャルの作成
$ vi app/views/shared/_feed.html.erb
<% if @feed_items.any? %>
<ol class="microposts">
<%= render partial: 'shared/feed_item', collection: @feed_items %>
</ol>
<%= will_paginate @feed_items %>
<% end %>
・@feed_itemsインスタンス変数で、自分のマイクロポストを取得し、マイクロポストを表示します。@feed_itemsは、別途"StaticPagesController"内のhomeアクション内で定義します。
・マイクロポストの詳細な表示内容は、feed_itemパーシャルで設定します。
・マイクロポストはページ化して表示します。
●feed_itemパーシャルを作成
$ vi app/views/shared/_feed_item.html.erb
個々のマイクロポストを表示します。
<li id="<%= feed_item.id %>">
<span class="user">
<%= link_to feed_item.user.name, feed_item.user %>
</span>
<span class="content"><%= feed_item.content %></span>
<span class="timestamp">
Posted <%= time_ago_in_words(feed_item.created_at) %> ago.
</span>
</li>
●コントローラ内で@feed_itemsインスタンス変数を定義
"StaticPagesController"内のhomeアクション内に@feed_itemsインスタンス変数を定義します。
現在ログインしているユーザーに属するマイクロポストを取得します。ページ化するのでpagenateメソッドを使用します。
自分のマイクロポストを取得する処理は、別途userモデル内で"feed"メソッドで定義します。
$ vi app/controllers/static_pages_controller.rb
def home
if signed_in?
@micropost = current_user.microposts.build
@feed_items = current_user.feed.paginate(page: params[:page])
end
end
●userモデルに"feed"メソッドを定義します。
$ vi app/models/user.rb
def feed
Micropost.where("user_id = ?", id)
end
●マイクロポスト投稿失敗時の処理の修正
マイクロポスト登録失敗時には、@feed_itemsインスタンス変数が必要なので空のインスタンス変数を作成します。
$ vi app/controllers/microposts_controller.rb
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
flash[:success] = "マイクロポストを登録しました!"
redirect_to root_path
else
@feed_items = []
render 'static_pages/home'
end
end
| アプリ作成 | 09:18 | comments:0 | trackbacks:0 | TOP↑