Придумайте пригласительный пакет приглашения - Рубин на рельсах - PullRequest
8 голосов
/ 16 августа 2011

Я пытаюсь пользователю Devise пригласить добавить сразу нескольких пользователей. По сути, когда кто-то создает учетную запись, первое, что он хочет сделать, это добавить группу пользователей, используя форму приглашения ...

просто не уверен, как дублировать поля в форме и заставить их отправить запрос на создание для каждой записи.

Заранее спасибо!

1 Ответ

14 голосов
/ 16 августа 2011

Это то, как я бы это сделал.

Предоставьте текстовую область, которая принимает список адресов электронной почты через запятую.Определите новое действие, которое отправляет приглашение на каждое письмо в этом списке.

Предположим, что в этом примере модель пользователя и контроллер пользователя.

Определение маршрута длядействие 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 %>

Пара замечаний:

  1. Если вам нравится ваш контроллер тощий, вы можете перенести логику в модельнапример, путем создания метода send_batch_invitations в вашей модели User и передачи параметров [: user_emails] в качестве аргумента этому методу от контроллера пользователей.

  2. Поскольку метод, который отправляетприглашения могут занять достаточно времени, я бы посоветовал вам назначить эту задачу обработчику фоновых заданий, например delayed_job или resque .Существуют railscasts , демонстрирующие использование этих двух процессоров фоновых заданий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...