У меня есть метод приглашения, который отправляет электронные письма пользователей для участия в команде.У меня есть модал, который отображает некоторых пользователей, которые уже имеют учетную запись и текстовое поле для ввода большего количества электронных писем, и отправляет приглашение человеку присоединиться к платформе.Но если я наберу электронное письмо, которое уже существует в базе данных, я получу:
Проверка не удалась: электронная почта уже получена
Но я хочу отправить электронное письмо, даже еслиУ человека уже есть аккаунт.
Вот что у меня есть:
def invite
invite = params.dig(:invite) || {}
candidate_ids = invite.dig(:candidate_ids) || []
extra_emails = invite.dig(:extra_emails) || ""
emails = extra_emails
.split(/,|;/)
.map(&:strip)
new_users = emails.map { |email| team_email_invite(email) }
candidate_ids.concat new_users.map(&:id)
invite_data = candidate_ids.map { |uid| {
:user_id => uid,
:team_id => @team.id,
} }
TeamInvite.create(invite_data)
.map!(&:email)
respond_to do |format|
format.html { redirect_to overviews_url, notice: 'Invites sent.' }
format.json { head :no_content }
end
end
def team_email_invite(email)
user = User.new({
:email => email,
:password => SecureRandom.hex,
:role => :shadow,
})
user.add_role :recruiter
user.skip_confirmation_notification!
user.save!
end
еще_для - это пользователи, которых я отображаю в списке (все хорошо) extra_emails - электронные письма в текстовом поле
Поэтому, когда я пишу пользователю, у которого уже есть учетная запись в текстовом поле, team_email_invite пытается создать нового пользователя и вылетает.
Я не хочу делать что-то вроде
begin
new_users = emails.map { |email| team_email_invite(email) }
rescue
new_users=[]
end
потому что тогда он не отправляет приглашение.Есть идеи, как это решить?