使用Devise堆栈级别太深

时间:2015-02-11 22:46:07

标签: ruby-on-rails ruby devise

我最近一直在使用Devise进行用户的帐户更新,我正在尝试的是允许更新所需的参数。我之前通过允许参数来做sign_up:

#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,甚至在这里查看了各种问题,但我找不到答案。

我的registrations_controller.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

我真的不知道还能做什么,我也问朋友,没有人知道会发生什么。我知道当存在无限循环时,堆栈级别太深,但是我和我的朋友都没有设法识别导致它的原因。

如果您需要更多信息,我会编辑问题并为您添加。

提前谢谢大家。

1 个答案:

答案 0 :(得分:2)

这段代码是导致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

你应该没事。