Devise-invitable : после приглашения пользователя отправляется 2 электронных письма, письмо с приглашением и письмо с сообщением Спасибо за регистрацию у нас.

Я использую Devise-invitable для отправки приглашений пользователям с использованием их адресов электронной почты. Когда я отправляю приглашение, одно из (правильно) отправленных писем содержит ссылку на приглашение. Однако отправляется другое электронное письмо, в котором приглашенному сообщается: «Спасибо за регистрацию у нас.».

Я не могу найти, почему это происходит.

Ruby version : 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
Rails version : 4.2.4
devise version : 3.5.10
devise_invitable version : 1.6.0

Код в контроллере приглашений:

class InvitationsController < Devise::InvitationsController
 def create
  params[:user][:email].each do |email|
    User.invite!({:email => email}, current_user) #If I comment out this line, both emails are not sent
  end
  redirect_to root_path
 end
end

Код в User.rb

class User < ActiveRecord::Base
# after_create :send_welcome_email
# Include default devise modules. Others available are:  
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :invitable, :omniauthable, :database_authenticatable,   :registerable,
     :recoverable, :rememberable, :trackable

attr_accessor :user_profile_phone, :user_profile_city

# Relationships
has_many :identities
has_many :orders
belongs_to :role, :dependent => :destroy
belongs_to :userdatum, :dependent => :destroy
belongs_to :userprofile, :dependent => :destroy
has_many :comments
has_many :deliveries
has_many :conversations, :dependent => :destroy

# Filters
before_save :assign_role  
after_create :send_welcome_mail

def send_welcome_mail
  UserMailer.registration(self).deliver_now
end

def assign_role
  self.role = Role.find_by name: "User" if self.role.nil?
end

def facebook
  identities.where( :provider => "facebook" ).first
end

def facebook_client
  @facebook_client ||= Facebook.client( access_token: facebook.accesstoken )
end

def google_oauth2
  identities.where( :provider => "google_oauth2" ).first
end

def google_oauth2_client
  if !@google_oauth2_client
    @google_oauth2_client = Google::APIClient.new(:application_name => 'Test', :application_version => "1.0.0" )
    @google_oauth2_client.authorization.update_token!({:access_token => google_oauth2.accesstoken, :refresh_token => google_oauth2.refreshtoken})
  end
  @google_oauth2_client
end

def admin?
  self.role.name == "Admin"
end

def sytlist?
  self.role.name == "Stylist"
end

def user?
  self.role.name == "User"
end
end

person sage76    schedule 03.07.2016    source источник


Ответы (2)


Вы сами отправляете оба письма.

User.invite! по умолчанию отправляет приглашение по электронной почте.

Вам нужно удалить after_create :send_welcome_mail в user.rb. Это то, что рассылает «приветственное письмо».

person Femi    schedule 20.08.2016

Решение, которое я использовал, состояло в том, чтобы проверить токен здесь:

after_create :send_welcome_email

def send_welcome_mail
    if self.invitation_token.nil?
      UserMailer.registration(self).deliver_now
    end
end

и добавить

def accept_invitation!
    super
    UserMailer.registration(self).deliver_now
end

Не уверен, что это лучший, но он решил мою проблему.

person sage76    schedule 04.07.2016