gpt4 book ai didi

elixir - Phoenix Framework - 如何通过 form_for 填充 map 字段?

转载 作者:行者123 更新时间:2023-12-02 04:44:03 24 4
gpt4 key购买 nike

我正在尝试填充一个字段 :params (来自模型/架构),它是一个 map 。我有一个可用的 form_for,我想通过复选框填充这个 :params 映射,以便在提交表单时 Controller 将收到类似 %{... params => %{"param1" => "true", "param2" => "false"}} ... 的信息。

我看过inputs_for,但这似乎并没有做我需要的,因为它依赖于嵌套模式和模型,这意味着我需要为每组新参数创建一个新模式(我需要一些通用的如果参数发生变化,则不需要更改源代码)。

<%= form_for @changeset, audit_audit_path(@conn, :new_tool_request, @audit.id),
fn f -> %>

<%= render LayoutView, "changeset_error.html", conn: @conn, changeset: @changeset, f: f %>

<div class="form-group"><label>Tool</label>
<%= select f, :toolname, tools %>
</div>
<div class="form-group"><label>Parameter 1</label>
<%= checkbox f, :param1 %>
</div>
<div class="form-group"><label>Parameter 2</label>
<%= checkbox f, :param2 %>
</div>

<div class="form-group"><label>Date of Execution</label>
<%= datetime_select f, :date %>
</div>
<div class="form-group">
<%= hidden_input f, :audit_id, value: @audit.id %>
</div>

<%= submit "Request", class: "btn btn-primary" %>
<% end %>

因此,不要为 param1 设置这些复选框和 param2 ,我需要将所有这些参数放入 map 中。如果使用不同的参数复选框呈现另一个表单,则它必须在与架构没有任何关系的情况下进行填充。

谢谢!

最佳答案

事实上,我认为,如果在这样的情况下:

  schema "checkmapss" do
field :name, :string
field :options, :map

timestamps()
end

我们只需要在form.html.eex中做:
  <div class="form-group">
<%= label f, :options, class: "control-label" %>
<%= text_input f, :options_one, name: "checkmap[options][one]", class: "form-control" %>
<%= error_tag f, :options %>
</div>
<div class="form-group">
<%= label f, :options, class: "control-label" %>
<%= text_input f, :options_two, name: "checkmap[options][two]", class: "form-control" %>
<%= error_tag f, :options %>
</div>

然后 changeset 函数将帮助我们完成其他事情。

关于elixir - Phoenix Framework - 如何通过 form_for 填充 map 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34900490/

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