Это то, как я бы это сделал.
Предоставьте текстовую область, которая принимает список адресов электронной почты через запятую.Определите новое действие, которое отправляет приглашение на каждое письмо в этом списке.
Предположим, что в этом примере модель пользователя и контроллер пользователя.
Определение маршрута длядействие batch_invite.
resources :users do
collection do
post 'batch_invite'
end
end
Определите действие batch_invite в 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
Форма, которая принимает список, разделенный запятымиписем в текстовой области.
<%= 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 %>
Пара замечаний:
Если вам нравится ваш контроллер тощий, вы можете перенести логику в модельнапример, путем создания метода send_batch_invitations в вашей модели User и передачи параметров [: user_emails] в качестве аргумента этому методу от контроллера пользователей.
Поскольку метод, который отправляетприглашения могут занять достаточно времени, я бы посоветовал вам назначить эту задачу обработчику фоновых заданий, например delayed_job или resque .Существуют railscasts , демонстрирующие использование этих двух процессоров фоновых заданий.