我最近一直在使用devise进行用户帐户更新,我试图做的是允许更新所需的参数。我以前是通过允许如下参数来注册的:
#application_controller.rb
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :nombre << :apellido
end
现在,当一个用户注册时,我觉得我可以做同样的事情来编辑用户的信息,所以我做了以下的工作:
#application_controller.rb
def configure_permitted_parameters
devise_parameter_sanitizer.for(:edit) << :genero << :estatura << :ciudad_id << :foto << :nombre << :apellido
end
令人惊讶的是,这没用,我也不知道为什么。我做了和以前一样的事,什么也没发生。于是我开始寻找编辑用户信息的不同方法,做了palaformatec recommends to do的事情,甚至在这里查看了各种问题,但我找不到答案。
我的注册控制器.rb如下所示:
#registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
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
sign_in resource_name, resource, bypass: true
respond_with resource, location: after_update_path_for(resource)
else
clean_up_passwords resource
respond_with resource
end
end
protected
def params
params.require(:user).permit({:fecha_nacimiento=>[]},:nombre,:apellido,:ciudad_id,:foto,:genero,:estatura)
end
def account_update_params
devise_parameter_sanitizer.for(:account_update) << {:fecha_nacimiento => []} << :genero << :estatura << :ciudad_id << :foto << :nombre << :apellido
end
def update_resource(resource,params)
resource.update_without_password(params)
end
end
我真的不知道还能做什么,我也问过朋友,没人知道会发生什么我知道当一个无限循环出现时,堆栈级别会变得太深,但是我和我的朋友都没有找到导致它的原因。
如果你需要更多的信息,我会编辑问题并为你添加。
提前谢谢大家。
最佳答案
这段代码是导致Stack level too deep error
的原因:
def params
params.require(:user).permit({:fecha_nacimiento=>[]},:nombre,:apellido,:ciudad_id,:foto,:genero,:estatura)
end
只要在方法本身中使用方法名,就可以使方法递归调用自己,直到繁荣!重命名方法名:
def update_params
params.require(:user).permit({:fecha_nacimiento=>[]},:nombre,:apellido,:ciudad_id,:foto,:genero,:estatura)
end
你应该没事的。