おひさしぶりです。水野です。
ここまでのあらまし
北九州に生活の場を移し、しばらく生活の安定や音楽、デザイン、映像まわりを頑張っていたのですが、事情があって一ヶ月ほど中止していたElixir学習を再開しました。
自分の記事を振り返ると"あれっ、ここなんで理解できてたのかわからない"といったことが大いにあることも気づきでした。
DBから取得したデータから "列の抽出"
piacereさんのドキュメントExcelから関数型言語マスター4回目:Webに外部APIデータ表示 の前半部分、DBから取得したデータからの列の抽出を行っていきます。
lib/sample_db_web/templates/page/index.html.eex
<%
result = Db.query( "select * from members" )
data = result |> Db.columns_rows
columns = result |> Db.columns
%>
<table border="1">
<tr>
<%= for column <- columns do %>
<th><%= column %></td>
<% end %>
</tr>
<%= for record <- data do %>
<tr>
<%= for column <- columns do %>
<td><%= record[ column ] %></td>
<% end %>
</tr>
<% end %>
</table>
ここまでのコードで表示させたDBの内容に対し、
|> Enum.filter( fn( column ) -> column == "name" || column == "age" end )
Enum.filterで名前と年齢のカラムのみフィルターします。
DBに重複データが残っているため、同じ名前が何度も出てきてしまいます。DB側でこれを綺麗にできないかが課題です。
外部APIを呼び出し、Web表示
Smallex導入およびmix deps.getは割愛します。
lib/sample_db_web/templates/page/index.html.eex
<%
result = Json.get( "https://qiita.com", "/api/v2/items?query=elixir" )
data = result
columns = [ "id", "title", "created_at" ]
%>