customize DeviseInvitable - thuy-econsys/rails_app GitHub Wiki

View

Run rails generate devise_invitable:views users or if you want specific views, pass the the views after -v flag, rails g devise_invitable:views -v registrations sessions.

This invokes DeviseInvitable::Generators::MailerViewsGenerator which creates invitation_instructions html and text files, as well as invoking form_for, which generates edit and new template views.

Controller

https://github.com/scambra/devise_invitable#configuring-controllers-

app/controllers/devise/invitations_controller.rb:19:in 'create'

app/controllers/devise/invitations_controller.rb:80:in 'invite_resource'

For customizing your controllers, you will be extending Devise::InvitationsController which inherits from DeviseController:

class Users::InvitationsController < Devise::InvitationsController
  
  # GET /resource/invitation/new
  def new
    super
  end
  
  # POST /resource/invitation
  def create
    super
  end

  # /resource/invitation/accept?invitation_token=abcdef
  def edit
    super
  end

  # PUT /resource/invitation
  def update
    super
  end

  private
  
    # this is called when creating invitation
    # should return an instance of resource class
    def invite_resource
      # skip sending emails on invite
      super { |user| user.skip_invitation = true }
    end

    # this is called when accepting invitation
    # should return an instance of resource class
    def accept_resource
      resource = resource_class.accept_invitation!(update_resource_params)
      # Report accepting invitation to analytics
      Analytics.report('invite.accept', resource.id)
      resource
    end  
     
end

Configure your route to use your UsersInvitationsController in config/routes.rb:

devise_for :users, :controllers => { invitations: 'users/invitations' }