2012-05-04 18 views
5

Estoy creando una aplicación basada en Devise, CanCan y Rolify para manejar recursos privados.Rieles Agregar Rol rol a través del formulario de usuario

El registro de diseño se ha deshabilitado porque no quiero permitir que los usuarios registren, mientras estoy creando una interfaz de administrador para agregar/editar usuarios.

Ahora me ocupo del rol de usuario. Me gustaría permitir que el administrador cree usuarios y establezca su función con el mismo formulario. No sé qué tipo de relación está usando rolify porque soy bastante nuevo en rails y Ruby y rolify agregaron el método rolify en lugar de una relación más clara.

Actualmente necesito y quiero tener solo un rol por usuario. Entonces, si alguien edita al usuario cambiando la función, borro todos @user.roles y luego configuro el nuevo.

Actualmente estoy haciendo que funcione usando un simple truco. He agregado un campo de selección al formulario, usando una colección de Role s para proporcionar una selección de roles. A continuación, dentro de los métodos create y update que estoy haciendo esto:

role = params[:user][:role] 
params[:user].delete :role 
@user = User.new(params[:user]) 

respond_to do |format| 
    if @user.save # update_attributes inside update 
    @user.add_role role 
    # ... 
    end 
end 

Como se puede ver que no estoy interactuando con el modelo Role directamente, sino mediante el método proporcionado add_role. Esto también crea otro problema, porque tengo que recuperar la función actual para permitir que la vista de actualización establezca el valor predeterminado adecuado para la selección (además del hecho más importante de que no sé cómo validar la presencia de UNA función).

Esto va a ser una solución demasiado sucia, por lo que me gustaría tener algún punto de vista, y tal vez alguna sugerencia sobre cómo hacer esto. Me he pasado todo el día trabajando en este :-(

Si necesitas información que me pueden solicitar.

PS estoy viendo una screenscast acerca de los recursos anidados, pero en el PP me puede ver que se trata de utilizar una tercera tabla para realizar un seguimiento de users_roles y no voy a entender cómo hacerlo. Gracias !!

Respuesta

2

al final he preferido dejar Rolify. se estaba tomando demasiado tiempo para mí, y me di cuenta Necesito una solución mucho más simple, así que ahora estoy usando una nueva columna en mi modelo que describe al usuario, y también he implementado un método similar a has_role para mantener la compatibilidad con CanCan.

Esto ha resuelto un montón de problemas, y es una solución más común (= ayuda más fácil).

En mi experiencia, noté que si nadie respondía su pregunta en tan poco tiempo dentro de 30 minutos, entonces lo estaba haciendo demasiado complejo.

Gracias a todos.

+0

lol ... terminé yendo por su camino, Rolify Gem estaba tomando demasiado tiempo para averiguarlo. – Benjamin

+1

jajaja, buena. Sigue siendo una herramienta válida, estoy seguro, pero para cosas simples, creo que es mucho más fácil crear un campo simple de cadena/entero. –

Cuestiones relacionadas