LoginSignup
0
0

More than 5 years have passed since last update.

Phoenixのselectタグ

Posted at

Phoenixのselectタグの使用方法が整理できてなかったので、下記に覚え書き。

コントローラ

コントローラにて、selectbox に表示する値(teams)を取得し、パラメータとしてView/Templateへ渡す。

member_controller.ex
def new(conn, _params) do
  changeset = Portal.change_member(%Member{})
  # チームのリストを取得する
  teams = Portal.list_teams()
  # チームのリストをパラメータとして渡す  
  render(conn, "new.html", changeset: changeset, teams: teams)
end

def edit(conn, %{"id" => id}) do
  member = Portal.get_member!(id)
  # チームのリストを取得する
  teams = Portal.list_teams()
  changeset = Portal.change_member(member)

  # チームのリストをパラメータとして渡す  
  render(conn, "edit.html", member: member, changeset: changeset, teams: teams)
end

テンプレート

特に記述に変更なし。

new.html.eex
<h2>New Member</h2>

<%= render "form.html", Map.put(assigns, :action, member_path(@conn, :create)) %>
edit.html.eex
<h2>Edit Member</h2>

<%= render "form.html", Map.put(assigns, :action, member_path(@conn, :update, @member)) %>

フォームテンプレート

Enum.mapによって展開する。

form.html.eex
<div class="form-group">
  <%= label f, :teams, class: "control-label" %>

  <%= select f, :team_id, Enum.map(@teams, &{&1.team_name, &1.id}) ,  class: "control-label" %>
  <%= error_tag f, :team %>
</div>

参考までに、特にDBから取得する必要のない一覧の記述方法は下記。

<div class="form-group">
  <%= label f, :gender, class: "control-label" %>
  <%= select f, :gender_id, ["男性": "1", "女性": "2", "その他": "0"], class: "control-label" %>
  <%= error_tag f, :team %>
</div>

よく使うので覚え書きまで。

※参考URL http://www.whoocus.com/blog/?p=2631

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0