Last active
April 17, 2022 19:36
-
-
Save mikeatlas/5628317 to your computer and use it in GitHub Desktop.
How to invite users in active admin with devise_invitable
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!-- /app/views/admin/users/new_invitiations.html.erb --> | |
| <h2>Send invitation</h2> | |
| <%= form_for @user, :url => send_invitation_admin_users_path do |f| %> | |
| <table style='width: 50%'> | |
| <tr> | |
| <td><%= f.label :first_name %></td> | |
| <td><%= f.text_field :first_name %></td> | |
| </tr> | |
| <tr> | |
| <td><%= f.label :last_name %></td> | |
| <td><%= f.text_field :last_name %></td> | |
| </tr> | |
| <tr> | |
| <td><%= f.label :email %></td> | |
| <td><%= f.text_field :email, :required => true %></td> | |
| </tr> | |
| </table> | |
| <%= f.submit "Send an Invitation" %> | |
| <% end %> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # /config/routes.rb | |
| devise_for :users, | |
| :controllers => { | |
| :sessions => "users_sessions", | |
| :registrations => "user_registrations", | |
| :passwords => "user_passwords", | |
| # Proper invitations should be sent through the active_admin interface. | |
| :invitations => 'users_invitations' # user_invitations_controller.rb | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # /app/admin/users.rb | |
| action_item do | |
| link_to 'Invite New User', new_invitation_admin_users_path | |
| end | |
| collection_action :new_invitation do | |
| @user = User.new | |
| end | |
| collection_action :send_invitation, :method => :post do | |
| @user = User.invite!(params[:user], current_user) | |
| if @user.errors.empty? | |
| flash[:success] = "User has been successfully invited." | |
| redirect_to admin_users_path | |
| else | |
| messages = @user.errors.full_messages.map { |msg| msg }.join | |
| flash[:error] = "Error: " + messages | |
| redirect_to new_invitation_admin_users_path | |
| end | |
| end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # /app/controllers/users_invitations_controller.rb | |
| class UsersInvitationsController < Devise::InvitationsController | |
| # GET /resource/invitation/accept?invitation_token=abcdef | |
| def edit | |
| render :edit, :layout => false | |
| end | |
| # PUT /resource/invitation | |
| def update | |
| self.resource = resource_class.accept_invitation!(resource_params) | |
| if resource.errors.empty? | |
| flash_message = resource.active_for_authentication? ? :updated : :updated_not_active | |
| set_flash_message :notice, flash_message | |
| sign_in(resource_name, resource) | |
| redirect_to '/profile', :alert => "Welcome! Please fill out your profile and upload a headshot." | |
| else | |
| respond_with_navigational(resource){ render :edit, :layout => false } | |
| end | |
| end | |
| end |
Author
I'm glad a 7 year old gist is still valuable, and appreciate the feedback, @jelaniwoods @storrence88 et al!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is great and helped me a lot!
I ran into one issue with this part:
@user.errors.empty?will probably almost never betrueafterUser.invite!since it skips validations. If you do want to have some validations in the Admin form you can make the blank User withnewand call a custom validation method on it before theif. Then if it passes you cansaveand invite the User.