Tengo una aplicación Rails con un modelo de usuario que contiene un atributo admin
. Está bloqueado usando attr_accessible
. Mi modelo es el siguiente:Rails 3.2, Asignación masiva, Roles dinámicos?
attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation
attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation, :admin, :as => :admin
Y es lo que mi método de actualización en mi controlador de usuarios parece aquí:
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user], :as => current_user_role.to_sym)
flash[:notice] = "Profile updated"
redirect_to edit_user_url(@user)
else
render 'edit'
end
end
tengo un método de ayuda en mi controlador de aplicación que pasa de nuevo el papel como una cadena :
def current_user_role
@current_user_role ||= current_user.admin? ? "admin" : "default"
end
helper_method :current_user_role
también he ajustado config.active_record.whitelist_attributes = true
en config/application.rb
.
He verificado que el método current_user_role
está devolviendo el valor correcto en función del estado de administración del usuario actual. Rails no está lanzando un error de asignación masiva. Pero cuando trato de actualizar el estado de administrador de un usuario mientras estoy conectado como administrador, Rails realiza la actualización e ignora silenciosamente el atributo admin
. Al levantar el registro del usuario en la consola de Rails, se muestra que el registro no se ha modificado.
Tengo la sensación de que hay un problema específico de Ruby o Rails en juego que no conozco. No puedo encontrar información sobre cómo hacer que el rol sea dinámico. Lo mejor que pude encontrar fue this.
Si te entiendo correctamente, respondiste tu propia pregunta. Si es así, debe publicar su respuesta como una respuesta (no una edición de su pregunta) y aceptarla. –