2011-05-16 18 views
6

Tengo una aplicación de Rails que es una plataforma de blogs, lo que permite que varios autores contribuyan. Mi modelo User tiene un : writer atributo booleano para asignar permisos de escritura. Sin embargo, : el escritor NO figura en attr_accessible para el modelo de usuario .Actualizar los atributos del modelo

yo quería una manera de editar este atributo a través de la web, sin tener que ejecutar

User.find_by_id(user_id).update_attribute(:writer, true/false) 

a través de la consola, pero me pregunto si esto sería imposible sin enumerar : escritor bajo attr_accessible para el modelo de usuario. Tengo varias páginas a las que solo tienen acceso los usuarios administradores, y me gustaría poder activar el atributo : writer dentro de esas vistas.

Si es posible, ¿cómo podría hacerse? ¡Gracias de antemano por tu ayuda!

Editar: Basado en el par de respuestas que he recibido, creo que debería haber sido más específico en mi pregunta. Me disculpo. Entiendo que aún puedo actualizar el atributo : writer individualmente, como lo han señalado Beerlington y Hitesh. Lo que quería saber es cómo se podría implementar dicha función a través de la vista. ¿Sería posible hacer un enlace cliqueable para alternar el estado de: escritor? ¿Es posible tener un enlace llamar a una función de controlador y pasar el user_id correspondiente al : escritor alternar?

Respuesta

7

attr_accessible y sólo attr_protected proteger a los atributos de mass-assignment. Todavía se puede asignarlos a través de otros medios sin embargo:

Asignación de masas (no funcionará):

model.update_attributes(:admin => true) 

asignación no Masa (opción 1):

model.admin = boolean 
model.save 

asignación no Masa (opción 2):

model.send(:attributes=, attributes, false) 

asignación no de masas (opción 3):

model.update_attribute(admin, boolean) 

Yo personalmente no me gusta ninguna de estas opciones manuales, así que escribió una joya llamada sudo_attributes que hace que sea más fácil para anular la asignación de masas utilizando métodos "sudo".

+0

Gracias Beerlington! ¿Hay alguna forma de implementar cualquiera de estas opciones a través de la vista, quizás a través de un botón o un enlace en el que se puede hacer clic? – ArcGhost

+0

Esto podría no estar en la vista y debería estar en su controlador o modelo. –

+0

Si tuviera que crear un método para hacer esto llamado, digamos, toggle_writer, en mi controlador, ¿podría llamarse así a través de un botón o un enlace en el que se pueda hacer clic? – ArcGhost

1

uso de este

User.find_by_id(user_id).update_attribute(:writer, true) or 
User.find_by_id(user_id).update_attribute(:writer, false) 
Cuestiones relacionadas