gpt4 book ai didi

elixir - 选择具有可能的 belongs_to 值的字段

转载 作者:行者123 更新时间:2023-12-04 02:06:39 27 4
gpt4 key购买 nike

我有 Category 和 belongs_to 类别的 Product。设置:

mix phoenix.new shop
cd shop
mix ecto.create
mix phoenix.gen.html Category categories name
mix phoenix.gen.html Product products name category_id:integer
mix ecto.migrate

web/router.ex

[...]
scope "/", Shop do
pipe_through :browser # Use the default browser stack

get "/", PageController, :index
resources "/categories", CategoryController
resources "/products", ProductController
end
[...]

web/models/product.ex

defmodule Shop.Product do
use Shop.Web, :model

schema "products" do
field :name, :string
belongs_to :category, Vutuv.Category

timestamps()
end

@doc """
Builds a changeset based on the `struct` and `params`.
"""
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:name, :category_id])
|> validate_required([:name, :category_id])
end
end

问题

我想在新的产品表单中呈现一个下拉选择字段。以便用户可以通过类别名称为产品选择类别。目前用户只能输入category_id:

web/templates/product/form.html.eex

[...]
<div class="form-group">
<%= label f, :category_id, class: "control-label" %>
<%= number_input f, :category_id, class: "form-control" %>
<%= error_tag f, :category_id %>
</div>
[...]

我需要更改什么来创建一个下拉选择字段,按名称显示数据库中的所有类别?

最佳答案

我会以可以直接传递给模板中的 Phoenix.HTML.Form.select/4 的格式获取类别:

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

然后将categories传递给模板中的Phoenix.HTML.Form.select/4:

<%= select f, :category_id, @categories %>

关于elixir - 选择具有可能的 belongs_to 值的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42828483/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com