2011-08-16 4 views
7

Intento que el usuario Idee invitaciones para agregar varios usuarios a la vez. Básicamente, cuando alguien crea una cuenta, lo primero que querrán hacer es agregar un grupo de usuarios usando el formulario inviable ...Diseñar invitaciones por lotes inviables - Ruby on rails

simplemente no estoy seguro de cómo duplicar los campos en el formulario y hacer que envíen una solicitud de creación para cada entrada.

¡Gracias de antemano!

+0

Supongo que está utilizando la gema devise_invitable. ¿Invita el usuario a un grupo de usuarios solo con el uso de direcciones de correo electrónico? – Shreyas

+0

Sí, tiene las dos correctas. Al usar Devise_invitable, y solo ingresa la dirección de correo electrónico, el usuario recibe un correo electrónico y establece su contraseña utilizando el enlace de aceptación que se le envió. –

Respuesta

13

Así es como lo haría.

Proporcione un área de texto que acepte una lista de correo electrónico separada por comas. Defina una nueva acción que envía una invitación a cada correo electrónico en esta lista.

Supongamos un modelo de usuario y un controlador de usuario para este ejemplo.

Define una ruta para la acción batch_invite.

resources :users do 
    collection do 
    post 'batch_invite' 
    end 
end 

definir la acción batch_invite en el users_controller

def batch_invite 
    #Validate the user_emails field isn't blank and emails are valid 
    params[:user_emails].split(",").each do |email| 
    User.invite!(:email => email) 
    end 
    #redirect_to appropriate path 
end 

Una forma que acepta una lista separada por comas de mensajes de correo electrónico en un área de texto.

<%= form_tag batch_invite_users_path, :method => :post do %> 
    <%= label_tag "Email ids of people you'd like to invite." %> 
    <%= text_area_tag :user_emails %> 
    <%= submit_tag "Invite!" %> 
<% end %> 

Un par de notas:

  1. Si te gusta el controlador flaco, que podría mover la lógica del modelo, por ejemplo, mediante la creación de un método send_batch_invitations en su modelo de usuario y pase los parámetros [: user_emails] como un argumento para ese método del controlador de usuarios.

  2. Dado que el método que envía las invitaciones podría llevar bastante tiempo para completarse, le sugiero que asigne esta tarea a un procesador de trabajos en segundo plano, como delayed_job o resque. Hay railscasts que demuestran el uso de estos dos procesadores de trabajo en segundo plano.