gpt4 book ai didi

ruby-on-rails - Devise 的堆栈级别太深

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:33 25 4
gpt4 key购买 nike

我最近一直在使用 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

真的不知道怎么办,问了 friend 也没人知道怎么回事。我知道当存在无限循环时会出现堆栈级别太深,但我和我的 friend 都无法确定导致它的原因。

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

提前谢谢大家。

最佳答案

这段代码是导致 Stack level too deep 错误的代码:

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

你应该没问题。

关于ruby-on-rails - Devise 的堆栈级别太深,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28466024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com