2015-02-11 72 views
2

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

我真的不知道自己還能做什麼,我問過的朋友,沒有人知道會發生什麼。我知道當存在一個無限循環時,堆棧級別太深,但我和我的朋友都沒有設法確定是什麼原因造成的。

如果您需要更多信息,我將編輯問題併爲您添加。

謝謝大家提前。

回答

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 

,你應該罰款。

+1

我不敢相信這是很容易解決的問題......非常感謝,我在這個艱難的日子裏掙扎着,你救了我的命:D – 2015-02-12 14:20:39

+0

很高興幫助:) – dgilperez 2015-02-12 14:56:31