2012-06-10 2 views
0

У меня есть два поля выбора в форме. Каждый раз, когда один из этих полей выбора меняет значение, остальная часть формы должна быть изменена. Я использовал следующий код для выбранных полей:удаленный выбор, требуется больше данных формы

<%= f.collection_select :model1, Model1.all, :id, :name, "data-remote" => true, "data-url" => "/model3/get_rest_form" %> 
<%= f.collection_select :model2, Model2.all, :id, :name, "data-remote" => true, "data-url" => "/model3/get_rest_form" %> 

Теперь проблема в том, что контроллер model3 нужны значения обоих выбранных полей для того, чтобы сформулировать ответ на запрос Ajax послал к нему, но он только получает значение поля выбора, которое только что было изменено в параметрах.

Если model1 поле изменяется я получаю:

params = {"model3"=>{"model1"=>"2"}} 

Если поле model2 изменяется я получаю:

params = {"model3"=>{"model2"=>"3"}} 

Но мне нужно следующее в обоих случаях.

params = {"model3"=>{"model1"=>"2", "model2" => "3"}} 

Как я могу это понять?

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

Спасибо!

ответ

0

Я придумал следующее решение после прочтения файла jquery_ujs.js. По-видимому, данные, которые присутствуют в атрибуте data-params тега select, добавляются к данным, которые отправляются контроллеру с использованием запроса ajax, и в самом начале подготовки запроса ajax 'ajax: before Событие запускается на элементе select. Я использую это событие для чтения данных из формы, их сериализации и размещения в теге data-params элемента select. Эти данные затем автоматически добавляются в запрос ajax. Вот мой код:

$(".add_form_data").on('ajax:before', function(event){ 
    var form = $(this).closest('form'); 
    var formData = form.serialize(); 
    $(this).data("params",formData); 
}); 

Единственное, что осталось сделать, это добавить add_form_data класс как отдельные элементы.

<%= f.collection_select :model1, Model1.all, :id, :name, "data-remote" => true, "data-url" => "/model3/get_rest_form" :class => "add_form_data" %> 
<%= f.collection_select :model2, Model2.all, :id, :name, "data-remote" => true, "data-url" => "/model3/get_rest_form" :class => "add_form_data" %> 
Смежные вопросы