Active_admin сообщение об ошибке двойного рендеринга, если я пытаюсь вернуть false или перенаправить в действие обновления

Я получил сообщение AbstractController :: DoubleRenderError в Admin :: AdminsController # update

Render и / или Redirect были вызваны несколько раз в этом действии. Обратите внимание, что вы можете вызывать только перенаправление render или не более одного раза за действие. Также обратите внимание, что ни перенаправление, ни рендеринг не прекращают выполнение действия, поэтому, если вы хотите выйти из действия после перенаправления, вам нужно сделать что-то вроде «redirect_to (...) и return»

также redirect_to(...) и return не помог :(

Как исправить это моя проблема? Помоги мне, пожалуйста? Я хочу визуализировать сообщение об ошибке и не обновлять все после, если check_card_enabled? if in If возвращает true. Благодарность!

def update_resource(object, attributes)
  if check_card_enabled?
    redirect_to admin_admin_path(@admin)
    flash[:alert] = I18n.t('errors.messages.please_add_gateway_info')
    return false
  end
  update_method = if attributes.first[:password] == attributes.first[:password_confirmation] &&
      attributes.first[:password].present? || attributes.first[:password_confirmation].present?
                    :update_attributes
                  else
                    :update_without_password
                  end
  object.send(update_method, *attributes)
end

def check_card_enabled?
  @admin.card_disabled? && (params[:admin][:card_disabled] == Ɔ') && @admin.gateway_info.nil?
end

Anser:

before_filter :check_card_enabled, only: :update

def check_card_enabled
  admin = Admin.find_by(email: params[:admin][:email])
  if admin.card_disabled? && (params[:admin][:card_disabled] == Ɔ') && admin.gateway_info.nil?
    flash[:alert] = I18n.t('errors.messages.please_add_gateway_info')
    redirect_to edit_admin_admin_url(admin)
  end
end

Всего 1 ответ


Да, вам нужно вернуться из метода при выполнении перенаправления. Фактически он добавляет только соответствующие заголовки для объекта ответа.

Вы можете написать более рубиновым способом:

if some_condition
    return redirect_to(path_one)
end

в соответствии с вашим кодом попробуйте:

def update_resource(object, attributes)
  if check_card_enabled?
    flash[:alert] = I18n.t('errors.messages.please_add_gateway_info')
    return redirect_to admin_admin_path(@admin), 
  end

 ....
 ....

Есть идеи?

10000