スポンサーリンク

2015年7月24日

[Elixir+Phoenix]Delete user

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

Wait a minute

ユーザを削除できるようにします。
DBからデータそのものを削除します。
論理的なフラグを立てる削除ではない。
なので、データを元には戻せないので注意して下さい。
更新や一覧よりは簡単なので、サクッと終わらせます。

Index

DeleteUser
|> Delete the user
|> Add user delete link
|> Extra

Delete the user

ユーザを削除する機能を実装します。
ファイル: web/controllers/user_controller.ex
Deleteアクション関数を追加。
def delete(conn, %{"id" => id}) do
  user = Repo.get(User, id)
  Repo.delete(user)

  conn
  |> put_flash(:info, "User deleted successfully.")
  |> redirect(to: static_pages_path(conn, :home))
end
サインインしていることと、
自分自身しか削除できないようにします。
plug :signed_in_user? when action in [:index, :show, :edit, :update, :delete]
plug :correct_user? when action in [:show, :edit, :update, :delete]
機能は実装できましたが、
リンクがないのでURLを直接叩くしか方法がありません。
ユーザを削除するリンクを追加します。
ユーザのプロファイルページへリンクを追加します。
ファイル: web/templates/user/show.html.eex
削除リンクを追加。
<h2>
  <div class="gravatar" style="float: left; margin-right: 10px;">
    <img src="<%= get_gravatar_url(@user) %>" class="gravatar">
  </div>
  <p><%= @user.name %></p>
  <%= link "Edit", to: user_path(@conn, :edit, @user), class: "btn btn-default btn-xs" %>
  <%= link "Delete", to: user_path(@conn, :delete, @user), method: :delete, class: "btn btn-danger btn-xs" %>
</h2>

Extra

特になし~

Speaking to oneself

前回、前々回と結構苦労しましたが、
今回は本当に少量の追加で終わりです。
拍子抜けしました?難しいよりは良いかと思います(笑)
よし、これにて第九章の機能は実装できた。
後は、まとめ記事を作成して第九章は終了です。
残すところ後2つです。
長かったですね~。
しかし、感慨に耽るにはまだ早いです。
後2つがサクッと終わるかは分かりませんが、
8月上旬にはv0.0.1のリリースにはなると思います。
その後、修正していきv1.0に持っていければいいですね。
一応、Rails Tutorial for Phoenixの記事ですが、
冬コミに当選すれば同人誌にして発行する予定があります。
本当にできるかは分かりませんが・・・できれば形にしたいですね。
それと昨日ですが、
海外サイト(コミュニティ)の方へ投稿のお誘いがきたので、投稿をさせて頂きました。
(こちらとしても願ったり叶ったりです)
elixirstatus.com
上記のサイトですが、Githubにてソースコードを公開しているので、
Phoenixの学習をするのに非常にためになります。
(応用的な部分が多いですね)
個人的には、ElixirStream→elixirstatusで学習すると丁度良い感じです。
ElixirStreamは、基礎的な学習に役立ちます。
elixirstatusは、応用的な学習に役立ちます。
(elixirstatusは、基礎ができないとソースコード読むの難しいかもしれないです)
まぁ参考までに~

Bibliography

人気の投稿