Ну, первое действие будет найти пользователя, а затем добавить его в группу, в которой он существует.Если он не существует, сделайте что-то вроде отправки приглашения по электронной почте и поместите его в отдельную таблицу, также принадлежащую группе.Затем, если кто-то с тем же адресом электронной почты зарегистрируется, поместите нового пользователя непосредственно в группу.Итого: добавьте новую модель с именем, например «Invite_user», которая имеет только строку адреса электронной почты и принадлежит к групповой модели.
class InvitedUser < ActiveRecord:Base
belongs_to :group
end
Создайте действие приглашения следующим образом:
def invite_user
user = User.find_by_email(params[:email])
group = Group.find(params[:id])
if user
group.users << user
else
send_invite user.email
group.invited_users << user
end
end
И, наконец, вам нужно создать подкласс контроллера регистрации Devise, чтобы вы могли переопределить / добавить действие по умолчанию после успешной регистрации.Однако эта часть может быть ненадежной, поскольку я частично полагаюсь на документацию Devise и не пробовал сам:
class RegistrationsController < Devise::RegistrationsController
protected
def def after_sign_up_path_for(resource)
invited_user = InvitedUser.find_by_email(resource.email)
if invited_user
invited_user.group.users << resource
invited_user.destroy
end
after_sign_in_path_for(resource)
end
end
или что-то в этом роде.И вам все еще нужно реализовать действие send_invite, конечно