0

我有一个文本字段,它接受任意数量的输入行,有四列。有效的输入可能是:

1 2 3 A
3 4 2 B
1 3 2 C
etc..

通常使用 ActiveBase,字段将由您使用 form_for 方法的任何模型生成,但是,我不希望在这里这样做,因为这样用户必须为每一行输入填写一个表单,然后提交,相反,我只想让用户粘贴任意数量的行,然后按一次提交。

提交后,将使用所有已创建模型的 JSON 表示进行服务调用。我认为让这个 textarea 填充 N 个模型将确保验证,并且我可以轻松抛出错误请求。

我不确定如何以“简单的 Rails 方式”解析和发布这些数据,因为表单不是使用 form_for 生成的,而且可以创建多个相同的模型。

所以真正的问题是,我该如何构建它?我的工作流程是什么样的?

4

1 回答 1

0

假设您有一个“手写”的表格:

<form id="my_form" action="/my_endpoint" method="POST"

  <!-- you need a line like this to PUT, DELETE, or PATCH -->
  <input type='hidden' name='_method' value="PUT">

  <!-- if you enabled csrf check -->
  <input type='hidden' name='authenticity_token' value='<%= form_authenticity_token %>'>

  <!-- a base input -->
  <!-- send the param as an array by using [] in the name attribute -->
  <input id="base_input" type='text' name='user_inputs[]'>

  <input type='submit' value='submit'>
</form>

您还有一个按钮,可以向表单添加输入:

<button id="add_input">add input</button

您可以编写一些 jQuery 来向表单添加字段(此示例是 coffeescript):

# document ready block

$(->
  $("#add_input").on "click", (e) ->
    $form = $ "#my_form"
    $baseInput = $ "#base_input"
    $newInput = $baseInput.clone()
    # clear entered text
    $newInput.val ""
    # remove base_input id
    $newInput.attr "id", ""
    # add the new input after the base input
    $baseInput.after $newInput
)

在控制器中,您将有一个参数user_inputs,它是一个字符串数组;如何处理这些数据取决于您。基本输入也可以是不同的类型(文本区域、复选框等),但在 jQuery 中,您必须使用不同的 javascript 方法来清除其先前的内容。

于 2016-10-11T08:28:56.830 回答