如何更改更新用户故障路由传递设计错误?
这是我的控制器代码,用于替换设计注册更新:
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)
但是这并没有将设计错误传递给视图。
答案 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