パパエンジニアのポエム

奥さんと娘ちゃんへの愛が止まらない

Elixir - Phoenixで株価を表示する(後編)

前回の続き。
今回は、Volume(日別出来高ランキング)ページを実装する。

VolumeController

引数に受けた文字列をDateにキャストする。
その値を使いDBからデータを取得する。
ポイントは where句ではピン演算子を使うこと。
んでそのままテンプレートに@itemsとして渡す。
web/controllers/volume_controller.exが以下。

defmodule StockScraping.VolumeController do
  use StockScraping.Web, :controller

  def index(conn, %{"date" => date}) do
    target_date = case Date.from_iso8601(date) do {:ok, value} -> value end
    items = StockScraping.YahooVolume |> where(date: ^target_date) |> Repo.all
    render conn, "index.html", items: items
  end
end

VolumeView

ヘルパーは今のところ使用していないので、デフォルトのまま。
web/views/volume_view.exが以下。

defmodule StockScraping.VolumeView do
  use StockScraping.Web, :view
end

VolumeTemplate

コントローラーから受け取った@itemsレンダリングする。
web/templates/volume/index.html.eexが以下。

<h3>出来高増加率ランキング</h3>
<ul>
  <%= for item <- @items do %>
    <li>
      <%= item.ranking %> - <%= item.name %>
    </li>
  <% end %>
</ui>

これで一旦表示出来た。
この時点で月別カレンダーと日別出来高ランキングが表示されるようになった。