设计 - 当用户更新失败重定向到自定义页面

时间:2017-11-03 16:41:51

标签: ruby-on-rails redirect devise routes

如何更改更新用户故障路由传递设计错误?

这是我的控制器代码,用于替换设计注册更新:

class RegistrationsController < Devise::RegistrationsController

  def edit
    render :edit
  end

  def update
    self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
    prev_unconfirmed_email = resource.unconfirmed_email if resource.respond_to?(:unconfirmed_email)

    resource_updated = update_resource(resource, account_update_params)
    yield resource if block_given?
    if resource_updated
      if is_flashing_format?
        flash_key = update_needs_confirmation?(resource, prev_unconfirmed_email) ?
          :update_needs_confirmation : :updated
        set_flash_message :notice, flash_key
      end
      bypass_sign_in resource, scope: resource_name
      respond_with resource, location: after_update_path_for(resource)
    else
      clean_up_passwords resource
      set_minimum_password_length
      respond_with resource, location: profile_member_users_path(resource)
    end
  end

  def after_update_path_for(resource)
    profile_member_users_path(resource)
  end

end  

我尝试改变:

else
  clean_up_passwords resource
  set_minimum_password_length
  respond_with resource

else
      clean_up_passwords resource
      set_minimum_password_length
      redirect_to profile_member_users_path(resource)

但是这并没有将设计错误传递给视图。

2 个答案:

答案 0 :(得分:1)

由于您正在重定向,因此当前资源数据未传递给视图。您需要在没有重定向的情况下呈现视图。尝试更换:

redirect_to profile_member_users_path(resource)

respond_with resource, location: profile_member_users_path(resource)

当然,这与原始的Devise代码没有什么不同。因此,您需要将profile_member_users_path(resource)替换为自定义路径。

答案 1 :(得分:0)

你需要通过重定向来设计错误吗?那么这取决于你如何使用这些错误。 Devises在resource.errors中将它们作为哈希传递。我刚刚测试了一下,这可能是你的出发点:

   else
      clean_up_passwords resource
      set_minimum_password_length
      respond_with redirect_to: profile_member_users_path(resource),
                   notice: resource.errors['current_password'][0]

    end