处理AJAX回调或渲染部分或重定向

时间:2018-05-29 07:24:06

标签: ruby-on-rails ajax coffeescript

我有一个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 :(得分:1)

对于您的控件正在进行AJAX回调并且您想要redirect_tosettings并且不想在模态上呈现它的特定情况,只需将nil作为HTML传递。< / p>

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()

答案 1 :(得分:0)

你的行动

写下面的代码,请根据您的要求添加条件

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