Goal
フォローしているユーザのマイクロポストを表示する。
Dev-Environment
OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
Phoenix Framework: v0.13.1
PostgreSQL: postgres (PostgreSQL) 9.4.4
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
Phoenix Framework: v0.13.1
PostgreSQL: postgres (PostgreSQL) 9.4.4
Wait a minute
現在、フォローしているユーザのマイクロポストを
ユーザのプロファイルに表示させます。
ユーザのプロファイルに表示させます。
ほとんどやることがないように見えますが、
すんなり終わらせてもらえるでしょうか?
すんなり終わらせてもらえるでしょうか?
Index
Micropost of following users
|> Get Micropost
|> Extra
|> Get Micropost
|> Extra
Get Micropost
マイクロポストの取得を修正します。
ファイル: web/models/micropost.ex
関数のクエリを以下のように修正。
関数のクエリを以下のように修正。
def paginate(user_id, select_page, following_ids) do
SampleApp.Helpers.PaginationHelper.paginate(
from(m in SampleApp.Micropost,
where: m.user_id in ^following_ids or m.user_id == ^user_id,
order_by: [desc: m.inserted_at]),
select_page)
end
ファイル: web/controllers/user_controller.ex
フォローしているidのリストを取得し、マイクロポストを取得する際の引数へ渡している。
フォローしているidのリストを取得し、マイクロポストを取得する際の引数へ渡している。
def show(conn, %{"id" => id, "select_page" => select_page}) do
user = Repo.get(SampleApp.User, id) |> Repo.preload(:relationships) |> Repo.preload(:reverse_relationships)
ids_list = list_map_to_value_list(user.followed_users, :followed_id)
page = SampleApp.Micropost.paginate(user.id, select_page, ids_list)
changeset = SampleApp.Micropost.new_changeset(
%SampleApp.Micropost{}, %{content: "", user_id: user.id})
...
end
これで完成~
Extra
少しだけ追加。
今のままですと、他のユーザを参照するには直接URLを叩かなければいけません。
最後にその部分を修正し、Tutorialを終わりたいと思います。
最後にその部分を修正し、Tutorialを終わりたいと思います。
ファイル: web/views/user_view.ex
関数追加。
関数追加。
def add_first_page_param(action) do
"#{action}?select_page=1"
end
ファイル: web/templates/user/index.html.eex
aタグ部分を追加。
aタグ部分を追加。
<%= for user <- @users do %>
<tr>
...
<td>
<a href="<%= add_first_page_param(user_path(@conn, :show, user)) %>">
<h4><%= user.name %></h4>
</a>
</td>
</tr>
<% end %>
ファイル: web/templates/user/show_follow.html.eex
aタグ部分を追加。
aタグ部分を追加。
<div style="clear: left; margin-top: 30px;">
<%= if @users do %>
<div class="user_avatars">
<%= for follow_user <- @users do %>
<a href="<%= add_first_page_param(user_path(@conn, :show, follow_user)) %>">
<img src="<%= get_gravatar_url(follow_user) %>" class="gravatar">
</a>
<% end %>
</div>
<% end %>
</div>
<div style="clear: right; margin-left: 250px;">
<%= if @users do %>
<ul>
<%= for follow_user <- @users do %>
<li>
<a href="<%= add_first_page_param(user_path(@conn, :show, follow_user)) %>">
<img src="<%= get_gravatar_url(follow_user) %>" class="gravatar">
<h4><%= follow_user.name %></h4>
</a>
</li>
<% end %>
</ul>
<%= render "pagination.html",
action: @action,
current_page: @current_page,
page_list: @page_list,
total_pages: @total_pages %>
<% end %>
</div>
Speaking to oneself
お疲れ様でした。
拙い内容とソースコードだったと思いますが、
ここまでお付き合い頂いた方には感謝します。
拙い内容とソースコードだったと思いますが、
ここまでお付き合い頂いた方には感謝します。
これにて、Tutorialを終わりにしたいと思います。
それにしても、何とか終わりましたね。
終わったと言うより、終わらせた感がありますが(笑)
終わったと言うより、終わらせた感がありますが(笑)
何にせよ区切りがついたことは変わりありません。
この後、アプリケーションのソースコード全体にかけてリファクタリングをしていく予定です。
この後、アプリケーションのソースコード全体にかけてリファクタリングをしていく予定です。
詳しいところは、女心と秋の空より移り気な今後の予定を書いた記事を上げますので、
そちらを参照して下さい。
そちらを参照して下さい。
まとめ記事を上げるの忘れないようにしないと。
それでは、また近いうちに~ノシ