如何在Phoenix选择字段中显示模型的所有记录

时间:2015-11-19 13:28:45

标签: elixir phoenix-framework ecto

我有以下型号......

  1. Page
  2. Category
  3. 我在new

    page_controller.ex行动中有以下代码
    def new(conn, _params) do
      changeset = Page.changeset(%Page{})
      categories = Repo.all(Category)
      render(conn, "new.html", changeset: changeset, categories: categories)
    end
    

    我在page / new.html.eex

    中有以下选择字段的代码
    <div class="form-group">
      <%= label f, :category_id, "Parent", class: "control-label" %>
      <%= select f, :category_id, @categories ,class: "form-control" %>
    </div>
    

    它应该在选择字段中显示所有类别,以便我可以为页面选择一个类别,但不幸的是我无法找到问题。如果您有任何建议,请告诉我。

1 个答案:

答案 0 :(得分:14)

select/4函数需要第三个参数的元组列表。

来自文档:

  

值应该是包含两项元组(如地图和关键字列表)或任何Enumerable的Enumerable,其中元素将用作生成的select的键和值。

尝试将控制器更改为:

categories = Repo.all(Category) |> Enum.map(&{&1.name, &1.id})

这也可以在查询级别完成:

query = from(c in Category, select: {c.name, c.id})
categories = Repo.all(query)

有关将查询定义为模型中的函数的说明,请参阅Phoenix: Ordering a query set