2016-10-10 26 views
0

我有一個文本字段,它接受任意數量的輸入行,並有四列。有效的輸入可能是:Rails 4 - 從文本區域生成多個模型(同一類型)

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

通常與ActiveBase,就由您使用的form_for方法的任何模型生成領域,但是,我不希望這樣做,在這裏,因爲那時用戶將必須填寫爲每一行輸入一個表單,然後提交,相反,我只想讓用戶粘貼任意數量的行,然後按提交一次。

提交後,服務調用將使用所創建的所有模型的JSON表示進行。我認爲有這個textarea填充N個模型將確保驗證,並且我可以輕鬆地拋出不好的請求。

我不確定如何解析和發佈'簡單的導軌時尚'這個數據,假設表單不是使用form_for生成的,並且可以創建多個相同模型。

所以真正的問題是,我該如何構造?我的工作流程是什麼樣子的?

+0

原來,我需要虛擬屬性來解決這個問題的第一部分。這個問題的第二部分是解決如何做多行,第三部分是關於如何將這些數據提交給服務。 –

+0

嗨,歡迎來到Stack Overflow。您是否嘗試過製作此表單並查看發佈到服務器上的內容?然後,看看你可以做什麼來遍歷數據......並使用每一行來創建你的模型?在這裏,我們寧願你至少在解決你的問題上有一個裂縫,然後你可以告訴我們你做了什麼(即使它不工作),再加上你得到的任何錯誤。這既表明你願意付出一些努力,而不是爲我們寫信給你;)並且還幫助我們更好地理解你想要做的事情。 –

+0

你有沒有嘗試過form_tag?對模型的評論比form_for少。 – eeeeeean

回答

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 
) 

在控制器中,你有一個PARAMS user_inputs這是一個字符串數組;如何處理這些數據取決於您。基本輸入也可以是不同的類型(textarea,複選框等),但在jQuery中,您必須使用不同的JavaScript方法來清除以前的內容。