У меня есть страница просмотра рельсов, которая отображает таблицу, в которой каждая строка является формой обновления пользователя. Чтобы отправить форму, вы должны установить флажок «отправить форму». Затем флажок добавляет «отправляемый» в список классов этой формы. Когда кнопка «обновить все» нажата, она использует jquery, чтобы вернуть коллекцию всех форм с классом «submittable», затем перебирает каждую форму и отправляет их, используя функцию submit () jquery. Это все хорошо, работает хорошо, как и ожидалось.
Проблема возникает при использовании функции фильтра состояния пользователя. Фильтр состояния позволяет вам щелкнуть по определенному пользовательскому статусу, а затем связать вас с действием контроллера с пользовательским статусом, заданным как параметр. Используя отладчик, я вижу, что этот запрос выполняет ожидаемое действие контроллера и загружает страницу с выбранными пользователями, как и ожидалось.
Однако - после использования опции фильтра состояния кнопка «обновить все» больше не работает. Он пытается отправить запрос «сообщение» и возвращает ошибку «маршрут не найден». Функция обновления будет работать только после обновления страницы.
Осматривая страницу, выглядит, как если бы форма была такой, как вы ожидаете, идентичной отправке при загрузке страницы fre sh, со всеми входами, присутствующими и правильно вложенными, включая скрытый ввод "patch". Однако использование отладчика в функции submitAll
показывает, что отправляемый elem
больше не содержит входных данных формы, а проверка вкладки «Сеть» в разделе «Заголовки» не показывает никаких отправляемых данных формы. Я думал, что проблема может быть вызвана jquery submit (), но когда я добавляю ввод f.submit, это также завершается ошибкой после использования фильтра состояния. Он даже не отправляет запрос, ничего не происходит, когда вы нажимаете кнопку вообще.
Любые идеи относительно того, что может нарушить мою форму, отправьте?
Вот представление, содержащее фильтр состояния и форму:
- status_options = User::SEARCH_STATUS_RANKING
- status_options.each do |status|
= link_to status, admin_unhandled_deposits_positive_enterprise_settlements_path(params.merge(status: status)), class: ['status', status]
button#update_all_button
| Update
= simple_form_for user, url: update_user_status_admin_user_url(user), method: :patch, remote: true do |f|
= f.simple_fields_for :review_reason do |rr|
= f.input :status, label: false, collection: row[:statuses_for_select], include_blank: false
= rr.input :reason_type, label: false, collection: review_reasons, required: true
= check_box_tag :form_submit, true, false, id: "submit_checkbox"
javascript:
var submitCheckbox = document.getElementById("#submit_checkbox");
submitCheckbox.addEventListener('change', selectFormForSubmit);
const thisForm = document.getElementById("#status_form");
function selectFormForSubmit() {
if (this.checked) {
thisForm.classList.add('submittable')
} else {
thisForm.classList.remove('submittable')
}
}
var submitAllButton = document.getElementById("update_all_button");
submitAllButton.addEventListener('click', submitAll);
function submitAll() {
$('.submittable').each( function(index, value){
const elem = $(value);
elem.trigger('submit.rails');
})
}
Это действие контроллера:
def positive_enterprise_settlements
report_date = params[:settlements_created_on] || Date.today
@report = PositiveEnterpriseSettlementsReport.new(settlements_created_on: report_date, user_status: params[:status])
@report.build
end