Active_admin сообщение об ошибке двойного рендеринга, если я пытаюсь вернуть false или перенаправить в действие обновления - PullRequest
1 голос
/ 12 февраля 2020

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

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

. redirect_to(...) и return не помогли: (

Как решить эту проблему? Помогите мне, пожалуйста? Я хочу показать сообщение об ошибке fla sh и не обновлять все данные после if 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] == '0') && @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] == '0') && admin.gateway_info.nil?
    flash[:alert] = I18n.t('errors.messages.please_add_gateway_info')
    redirect_to edit_admin_admin_url(admin)
  end
end

1 Ответ

1 голос
/ 12 февраля 2020

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

Вы можете написать больше rubyi sh way:

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

 ....
 ....
...