2016-12-11 5 views
0

Я пытаюсь создать форму с раскрывающимся списком, где пользователи могут создавать новый объект, если выбрано что-то вроде «Создать новое» или у них есть возможность выбрать из своего ранее созданные объекты, которые должны заполнить форму соответствующими данными.Как обновить/предварительно заполнить форму Rails с помощью раскрывающегося списка

На данный момент у меня просто есть для каждого цикла заполняющий раскрывающийся список с ранее созданными объектами вне формы и формой, которая создает новые объекты.

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

ответ

1

Вам необходимо отправить запрос AJAX GET на собственный маршрут, а затем выполнить действие контроллера, отвечающее на формат json, и возвращает коллекцию на основе параметров, переданных в этом запросе GET. Скажем, вы загружаете доступные модели автомобилей на основе выбранной марки:

маршрутов: Действие

get '/get_models/:make_id', to: 'car_makes#available_models' 

контроллер:

запрос
def available_models 
    @models = Model.where(id: ids) 
    respond_to do |format| 
    format.json { render json: @models } 
    end 
end 

AJAX:

var fetchModels = function(makeId){ 
    $.ajax({ 
    method: 'GET', 
    url:  '/get_models/' + makeId, 
    success: function(data) { 
     ... 
     var target = $('select#car_models'); // field to which options are appended 
     $.each(data, function(id, model){ 
     $(target).append(
      $('<option>').text(model).attr('value', id) // populate options   ); 
     }); 
    } 
    ... 
    }); 
} 

и затем установить запрос AJAX для запуска по событию .change в родительском select fie л.д.:

$('select#car_makes').change(function(){ 
    var makeId = $(this).val(); 
    fetchModels(makeId); 
}); 

Есть целый ряд ресурсов, объясняющих другие пути достижения этой цели:

+0

Так я понимаю, и получить это по большей части, разъединение у меня есть между тем, как использовать эту информацию в сочетании с формой рельсов который затем может отредактировать выбранный объект и сохранить его. – Kevin

+0

Из того, что я могу сказать, все это позволяет выбрать автомобиль, а затем обновить другое раскрывающееся меню для доступных моделей автомобилей. Чтобы продолжить свою аналогию, мне нужно выбрать машину, а затем внести изменения в атрибут объекта создания автомобиля, например имя, в форме, заполненной ее атрибутами, затем сохрани это. – Kevin

+0

Таким образом, вы хотите, чтобы посетители имели один выбор с коллекцией 'make', а затем, как только выбран make, поля с атрибутами объектов' make' добавляются в одну и ту же форму. Верный? –

0

Так что я в конечном итоге цикл через все возможные варианты для выбора выпадающего списка и циклического изменения формы рельсов со всеми возможными параметрами и с помощью jQuery onchange для отображения/скрытия корра ect html.

Это не очень хорошее решение для меня, тем более что он должен каждый раз загружать html всех параметров. Но я не знаю, что еще делать, и это работает.

Если у кого есть какие-либо идеи для лучшего решения, дайте мне знать :)

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