2016-10-10 8 views
0

私は、入力の行数をいくつでも受け入れるテキストフィールドを4つのカラムに持っています。有効な入力は次のようになります。ActiveBaseと通常Rails 4 - (同じタイプの)複数のモデルをテキストエリアから生成する

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

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

送信後、作成されたすべてのモデルのJSON表現でサービスコールが行われます。私は、このテキストエリアにN個のモデルを設定することで検証が確実になると考えていました。

form_forを使用してフォームが生成されないことと、同じモデルの複数を作成できるという事実を考慮して、このデータを「単純なレールファッション」で解析してポストする方法がわかりません。

実際の質問は、どのように私はこれを構造化するのですか?私のワークフローはどのようなものですか?

<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> 

そして、あなたはまた、フォームへの入力を追加し、ボタンがあります:

+0

この問題の最初の部分を解決するには、仮想属性が必要です。この問題の2番目の部分は、複数の行を実行する方法を解決することであり、3番目は、このデータをサービスに送信する方法です。 –

+0

こんにちは。あなたはこのフォームを作って、それを投稿するときにあなたのサーバーに何が届くのか見てきましたか?次に、データを繰り返し処理するためにできることを確認し、各行を使用してモデルを作成します。ここでは、少なくともあなたの問題を解決するのに亀裂があったことを望んで、その後、あなたが行ったこと(たとえそれが動作していなくても)とあなたが得たエラーを表示することができます。これは両方とも、あなたのためにそれを書いているのではなく、あなたが何らかの努力をして喜んでいることを示しています;)また、あなたがしようとしていることをよりよく理解するのに役立ちます。 –

+0

form_tagを試しましたか? form_forよりもモデルについての意見はあまりありません。 – eeeeeean

答えて

0

は、あなたが「手で」書いたフォームがあるとし

<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 
) 

、あなたがのparams 0123を持っていると思いますは文字列の配列です。このデータをどうするかはあなた次第です。基本入力は異なるタイプ(textarea、checkboxなど)でもかまいませんが、jQueryでは以前のコンテンツをクリアするためにさまざまなjavascriptメソッドを使用する必要があります。

関連する問題