2016-10-10 4 views
0

У меня есть текстовое поле, которое принимает любое количество строк ввода с четырьмя столбцами. Допустимый диапазон значений может быть:Rails 4 - Создание нескольких моделей (одного типа) из текстовой области

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

Обычно с ActiveBase, поля будут генерироваться любой модели, которые вы используя form_for метод, однако, я не хочу, чтобы сделать это здесь, потому что тогда пользователь должен заполнить вне формы для каждой строки ввода, а затем отправьте, когда вместо этого я просто хочу, чтобы пользователь вставлял любое количество строк и сразу же вводил submit.

После отправки вызова сервис будет выполнен с представлением JSON всех моделей, которые были созданы. Я подумал, что если бы это текстовое поле заполнило N количество моделей, они бы обеспечили проверку, и я мог бы легко выбросить плохие запросы.

Я не уверен, как анализировать и публиковать эти данные в «простых рельсах», учитывая, что форма не генерируется с использованием form_for и того факта, что может быть создано несколько одинаковых моделей.

Итак, реальный вопрос заключается в том, как мне это структурировать? Как выглядит мой рабочий процесс?

+0

Оказывается, мне нужны виртуальные атрибуты для решения первой части этой проблемы. Вторая часть этой проблемы - решить, как сделать несколько строк, а третья - о том, как отправить эти данные в службу. –

+0

Привет и добро пожаловать в переполнение стека. Вы пробовали сделать эту форму и посмотреть, что происходит на вашем сервере, когда вы публикуете ее? Затем посмотрите, что вы можете сделать, чтобы перебирать данные ... и использовать каждую строку для создания своей модели? Здесь мы предпочитаем, чтобы у вас была хоть какая-то проблема при решении вашей проблемы, тогда вы можете показать нам, что вы сделали (даже если она не работает), плюс любые ошибки, которые вы получили. Это показывает, что вы готовы приложить некоторые усилия вместо того, чтобы мы пишем для вас;), а также помогает нам лучше понять, что вы пытаетесь сделать. –

+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, checkbox и т. Д.), Но в jQuery вам придется использовать разные методы javascript для очистки своего предыдущего содержимого.

Смежные вопросы