Обрабатывать обратный вызов AJAX либо визуализировать частично, либо перенаправить - PullRequest
0 голосов
/ 29 мая 2018

У меня есть вызов AJAX для загрузки модального режима, но у меня есть before_action, если consent settings отключены redirect_to страница настроек.

Вызов AJAX

$(document).on 'click', '#add-consent-form-template, #edit-consent-form-template', (e) ->
  $.ajax(url: $(this).attr('data-url')).done (html) ->
    $("#modal-consent-form-content").html html
    $("#modal-consent-form").modal('show')
    $('.date_picker').each ->
      $(this).datepicker
        showOn: 'both'
        dateFormat: 'mm-dd-yy'
        altFormat: 'yy-mm-dd'
        altField: $(this).next()
        minDate : 0
    $('.ui-datepicker-trigger').addClass('fa fa-calendar fa-lg mar-left-10')
    $('.description .widget').height($('.study-graph .widget').height())
  e.preventDefault()

Обычный случай (если настройки согласия включены)

render partial: 'add_consent_form_template_modal', layout: false

Ошибка: случай (Если настройки согласия отключены)

set_flash(error: 'Consent Forms are disabled. Please turn on Consent Forms first.')
redirect_to edit_study_path(id: @study)

Проблема

В случае redirect_to она отображает всю страницу настроек в модальном режиме.Как я могу обработать обратный вызов AJAX для рендеринга частичного или перенаправления на страницу настроек?

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Для конкретного случая, когда ваш элемент управления выполняет обратный вызов AJAX и вы хотите redirect_to до settings и не хотите отображать его в модальном режиме, просто передайте nil как HTML.

set_flash(error: 'Consent Forms are disabled. Please turn on Consent Forms first.')
render html: nil

И в вашем Javascript / CoffeeScript вы можете просто отметить length на вас html.

$(document).on 'click', '#add-consent-form-template, #edit-consent-form-template', (e) ->
  $.ajax(url: $(this).attr('data-url')).done (html) ->
    if html.length > 0
      $("#modal-consent-form-content").html html
      $("#modal-consent-form").modal('show')
      $('.date_picker').each ->
        $(this).datepicker
          showOn: 'both'
          dateFormat: 'mm-dd-yy'
          altFormat: 'yy-mm-dd'
          altField: $(this).next()
          minDate : 0
      $('.ui-datepicker-trigger').addClass('fa fa-calendar fa-lg mar-left-10')
      $('.description .widget').height($('.study-graph .widget').height())
    else
      window.location.href = <Link to your settings page>
  e.preventDefault()
0 голосов
/ 29 мая 2018

в действии

напишите ниже код, пожалуйста, добавьте, если условие согласно вашему требованию

if consent == ON
   render partial: 'add_consent_form_template_modal', layout: false
else
   set_flash(error: 'Consent Forms are disabled. Please turn on Consent Forms first.')
redirect_to edit_study_path(id: @study) and return
end
...