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
我真的不知道自己還能做什麼,我問過的朋友,沒有人知道會發生什麼。我知道當存在一個無限循環時,堆棧級別太深,但我和我的朋友都沒有設法確定是什麼原因造成的。
如果您需要更多信息,我將編輯問題併爲您添加。
謝謝大家提前。
我不敢相信這是很容易解決的問題......非常感謝,我在這個艱難的日子裏掙扎着,你救了我的命:D – 2015-02-12 14:20:39
很高興幫助:) – dgilperez 2015-02-12 14:56:31