【问题标题】:Is it possible to create a form with certain format in backend?是否可以在后端创建具有某种格式的表单?
【发布时间】:2020-05-20 22:44:21
【问题描述】:

我想写一个简单的表单并提交到后端。这是我的表格:

<form action="/users" method="post">
  <input name="_method" type="hidden" value="put">
  <input name="_csrf_token" type="hidden" value="xxx">  
  <label for="user_name">Name</label>  
  <input id="user_1_name" name="user[][name]" type="text" value="Stephen">

  <label for="user_age">Age</label>  
  <input id="user_1_age" name="user[][age]" type="number" value="30">


  <label for="user_name">Name</label>  
  <input id="user_2_name" name="user[][name]" type="text" value="Leo">

  <label for="user_age">Age</label>  
  <input id="user_2_age" name="user[][age]" type="number" value="15">
  <div>
    <button type="submit">Save</button>  
  </div>  
</form>

提交到后端时,我收到的参数是:

Parameters: %{"_csrf_token" => "xxx", "_method" => "put", "user" => [%{"name" => "Stephen"}, %{"age" => "30"}, %{"name" => "Leo"}, %{"age" => "15"}]}

但我希望参数是(每个用户一张地图):

Parameters: %{"_csrf_token" => "xxx", "_method" => "put", "user" => [%{"name" => "Stephen", "age" => "30"}, %{"name" => "Leo", "age" => "15"}]}

有可能吗?

【问题讨论】:

  • 为什么用 Ruby on Rails 和 Phoenix 框架来标记它?它是哪一个?通常,在 Rails / Rack 上,您会将输入命名为 user[0][name]user[0][age]user[1][name]。如果您需要示例,请查看 fields_for 的工作原理。
  • @max 我正在研究 phoenix 框架,纯 html 形式对理解逻辑更有意义。得到答复后,我将转移到 phoenix/rails 方式。更何况,上面的后端日志来自phoenix/rails
  • 我不会假设 phoenix 和 rack 实际上以相同的方式处理表单数据。他们可能会,但这似乎是一个糟糕的假设。

标签: html ruby-on-rails forms phoenix-framework


【解决方案1】:

Phoenix.HTML.Form.input_for/4 是你所需要的

<%= form_for @changeset, @action, fn f -> %>

 <%= hidden_input f, :_csrf_token, value: "xxx" %>
 <%= hidden_input f, :_method, value: "put" %>

 <%= inputs_for f, :user, fn cf -> %>
   <%= label cf, :name %>
   <%= text_input cf, :name %>
   <%= error_tag cf, :name %>

   <%= label cf, :age %>
   <%= text_input cf, :age %>
   <%= error_tag cf, :age %>
 <% end %>

 <%= inputs_for f, :user, fn cf -> %>
   <%= label cf, :name %>
   <%= text_input cf, :name %>
   <%= error_tag cf, :name %>

   <%= label cf, :age %>
   <%= text_input cf, :age %>
   <%= error_tag cf, :age %>
 <% end %>

 <div><%= submit "Save" %></div>
<% end %>

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    相关资源
    最近更新 更多