2010-09-13 9 views
17

Me gustaría agregar un requisito de invite_code para que los usuarios se registren. Es decir. Además de exigirles que especifiquen un combo de correo electrónico/contraseña, quiero un campo adicional: invite_code. Esta es una solución temporal para que los usuarios no deseados no puedan iniciar sesión durante un período alfa dado.Ruby on rails: ¿Diseñar, quiere agregar el código de invitación?

Estoy confundido ya que Devise no agrega controladores. Estoy familiarizado con el concepto de atributos virtuales, y me da la impresión de que podría agregar un: invite_code al modelo, y luego simplemente codificar un paso ahora donde dice que el código de invitación debe ser igual a 12345 o lo que sea por ahora.

¿Tiene esto sentido con la autenticación del dispositivo? ¿Y cómo voy acercándome a esto desde un enfoque de relajación adecuado?

Muchas gracias.

+0

He añadido: invite_code def @invite_code final ... que permite al invite_code para ser accesible como un atributo virtual, pero ¿dónde debo hacer la lógica para el invite_code debe ser igual a "12345"? – Dave

Respuesta

24

1) Un atributo virtual generalmente necesita un colocador además de un getter.

La manera más fácil es añadir

attr_accessor :invite_code 
attr_accessible :invite_code # allow invite_code to be set via mass-assignment 
    # See comment by James, below. 

al modelo de usuario

2) supongo que maquinan quiere que el modelo de usuario para validar. Por lo que podría detener la validación mediante la adición de

validates_each :invite_code, :on => :create do |record, attr, value| 
    record.errors.add attr, "Please enter correct invite code" unless 
     value && value == "12345" 
end 

NOTA: agregado: ON =>: Crear desde la invite_code sólo es necesario para crear el nuevo usuario, no para la actualización.

+0

Esa es la mejor manera, porque usted controla el mensaje de validación. –

+0

Muchas gracias. – Dave

+0

me ayudó mucho – useranon

10

Prueba esto: http://github.com/scambra/devise_invitable

It adds support todevise para enviar invitaciones por correo electrónico (requiere ser autenticado) y aceptar la configuración de la contraseña invitación.

Funciona con Devise> = 4.0 Si desea utilizar el dispositivo 3.0.x, debe usar 1.2.1 o inferior Si desea utilizar el dispositivo 3.1.x, debe usar 1.3.2 o inferior Si desea para usar el dispositivo> = 3.2, debe usar 1.6.1 o inferior ...

+1

Gracias por el enlace, pero creo que esto hace algo ligeramente diferente: permite a los usuarios invitar a otros usuarios, mientras que por ahora simplemente deseo bloquear el registro de nuevos usuarios a menos que tengan un código de invitación que distribuyo. – Dave

0

De acuerdo con los documentos, invitable le permite controlar quién invita a otros. Las personas no pueden distribuir invitaciones si hay una configuración "0" para invitation_limit.

A partir de los documentos:

invitation_limit: El número de invitaciones usuarios pueden enviar. El valor predeterminado de nil significa que los usuarios pueden enviar tantas invitaciones como desean, no hay límite para ningún usuario, la columna invitation_limit no es utilizada. Una configuración de 0 significa que no pueden enviar invitaciones. Una configuración n> 0 significa que pueden enviar n invitaciones. Puede cambiar invitation_limit columna para algunos usuarios para que puedan enviar más o menos invitaciones, incluso con invitation_limit mundial = 0.