Devise invitable batch invite - Ruby on rails

2019-03-13 14:34发布

问题:

I'm trying to user Devise invitable to add multiple users at once. Basically when someone creates an account, the first thing they'll want to do is add a bunch of users using the invitable form...

just not sure how to duplicate fields in the form and have them send a create request for each entry.

Thanks in advance!

回答1:

This is how I would do it.

Provide a text area that accepts a comma-separated email list. Define a new action that sends an invitation to each email in this list.

Lets assume a User model and a users controller for this example.

Define a route for the batch_invite action.

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

Define the batch_invite action in the 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

A form that accepts a comma-separated list of emails in a textarea.

<%= 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 %>

A couple of notes :

  1. If you like your controller skinny, you could move the logic to the model, for instance, by creating a send_batch_invitations method in your User model and pass the params[:user_emails] as an argument to that method from the users controller.

  2. Since the method that sends the invitations could take sufficient time to complete, I would suggest you assign this task to a background job processor, such as delayed_job or resque. There are railscasts that demonstrate the usage of these two background job processors.