找不到RegistrationsController#update的模板

时间:2017-05-08 01:12:35

标签: ruby-on-rails ruby

我尝试引发错误,然后呈现注册控制器的编辑页面。但当我点击错误时页面冻结,我收到此错误。

No template found for RegistrationsController#update rendering head :no_content
Completed 204 No Content in 698ms (ActiveRecord: 2.3ms)

这是我的控制器动作

def update
    resource.transaction do
      super do |user|
        if membership_params.present?
          ToggleAlertEmails.perform(user: current_user, params: membership_params)
        end

        if user.errors[:current_password].present?
          raise ActiveRecord::Rollback
          redirect_to edit_user_registrations_path
        end
      end
    end
  end

当我点击raise ActiveRecord:Rollback时,它实际上回滚了我想要的更改,但它不会继续并呈现编辑页面。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

redirect_to edit_user_registrations_path移到事务外部,使用标志(下例中的error)仅在执行回滚时重定向,如下所示:

def update
  error = false

  resource.transaction do
    super do |user|
      if membership_params.present?
        ToggleAlertEmails.perform(user: current_user, params: membership_params)
      end

      if user.errors[:current_password].present?
        error = true
        raise ActiveRecord::Rollback
      end
    end
  end

  redirect_to edit_user_registrations_path if error
end

或者,如果您愿意,请避开该标记并再次使用user.errors[:current_password].present?

redirect_to edit_user_registrations_path if user.errors[:current_password].present?

虽然您发布的具体错误是因为update操作没有视图(例如update.html.erb),因此您需要创建一个或通过render指定另一个渲染/重定向/ redirect_to

如果您想要始终重定向到edit,请避开最终if并仅保留redirect_to

redirect_to edit_user_registrations_path

如果要在没有回滚时重定向到其他操作或呈现不同的视图(即updateedit),请使用完整的if / {{ 1}}声明:

else

请记住,无论您选择哪种方案,都应在交易之外添加渲染/重定向。