0

4 列の任意の行数の入力を受け入れるテキスト フィールドがあります。有効な入力は次のとおりです。

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

通常、ActiveBase では、form_for メソッドを使用して任意のモデルによってフィールドが生成されますが、ここではそうしたくありません。ユーザーは入力の各行に対してフォームに入力してから送信する必要があるためです。代わりに、ユーザーに任意の数の行を貼り付けて、送信を1回押してもらいたい場合。

送信後、作成されたすべてのモデルの JSON 表現を使用してサービス呼び出しが行われます。このテキストエリアに N 個のモデルを設定することで検証が確実になり、不適切なリクエストを簡単に捨てることができると考えました。

フォームが 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コントローラーには、文字列の配列である paramsがあります。このデータをどうするかはあなた次第です。ベース入力は別のタイプ (テキストエリア、チェックボックスなど) にすることもできますが、jQuery では別の JavaScript メソッドを使用して前のコンテンツをクリアする必要があります。

于 2016-10-11T08:28:56.830 に答える