ruby-on-rails-4devisedevise-invitable

How to customize Devise Invitable for different use cases


I am trying to follow the documentation for Devise Invitable here to send different email for different user types, in my case partners and clients.

So it says to add in your Devise model, which in my case is User.rb, the following code.

....
  attr_accessor :invitation_instructions
....
    def self.invite_partner!(attributes={}, invited_by=nil)
      self.invite!(attributes, invited_by) do |invitable|
       invitable.invitation_instructions = :partner_invitation_instructions
      end
    end

    def self.invite_client!(attributes={}, invited_by=nil)
     self.invite!(attributes, invited_by) do |invitable|
       invitable.invitation_instructions = :client_invitation_instructions
     end
    end

Then from my controller, when a new user signs up I am calling

....
if current_user.is_client?
  user.invite_client!(user, current_user)
else
  user.invite_partner!(user, current_user)
end

When I do that the error I get back is

undefined method 'invite_client!' for #<User:0x007ffbcdfabd08>

Which is a little confusing because the method is defined in the user model, so I would think that, at least, it was defined.

Any help on fixing this and getting this setup to work would be greatly appreciated!


Solution

  • I think those are class methods and you should call it like User.invite_client! and also pass your arguments in method.

    Same goes for invite_partner!