2012-03-15 11 views
8

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.

+2

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. –

Respuesta

3

Se ha producido un attr_accessor errante: admin en mi modelo que se dejó en a partir de un intento previo en conseguir que esto funcione. Lo pasé por alto. Quitándolo lo arregló.

Por lo tanto, el resultado es que esta es una forma bastante simple de obtener roles dinámicos que funcionen en Rails 3.2.

Cuestiones relacionadas