Devise Invitable : Optionally Send Email

2019-05-07 11:27发布

问题:

in devise invitable, you can invite a new user by performing:

User.invite!(:email => "new_user@example.com", :name => "John Doe")

What I would like to do is (sometimes) prevent devise invitable from sending out an email. I found the following code in the library:

def invite!
        if new_record? || invited?
          self.skip_confirmation! if self.new_record? && self.respond_to?(:skip_confirmation!)
          generate_invitation_token if self.invitation_token.nil?
          self.invitation_sent_at = Time.now.utc
          save(:validate => false)
          ::Devise.mailer.invitation_instructions(self).deliver
        end
      end

Any ideas on how to best update that to not send out the email on the last line? I'm not familiar with the ::

thanks

回答1:

you can use:

User.invite!(:email => "new_user@example.com", :name => "John Doe") do |u|
  u.skip_invitation = true
end

or

User.invite!(:email => "new_user@example.com", :name => "John Doe", :skip_invitation => true)

this will skip invitation email.