Skip to content

Instantly share code, notes, and snippets.

@jnx
Forked from mikeatlas/new_invitation.html.erb
Created May 7, 2014 12:56
Show Gist options
  • Save jnx/942ddb377a0227dc2fe4 to your computer and use it in GitHub Desktop.
Save jnx/942ddb377a0227dc2fe4 to your computer and use it in GitHub Desktop.
<!-- /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 %>
# /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
}
# /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
# /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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment