Class: Invitation::InvitesController
- Inherits:
-
ApplicationController
- Object
- ApplicationController
- Invitation::InvitesController
- Defined in:
- app/controllers/invitation/invites_controller.rb
Overview
Invitation::InvitesController - issue invitations to users via email address.
Controller uses an (inner class) Form object that is not a persisted model. The form can accept many email addresses, and creates on Invite per email address.
Subclass and modify or extend, or copy the controller into your app with ‘rails generate invitation:controller`.
Common extensions include:
-
add authorization checks: subclass and add before_actions to :new and :create.
-
override after_invite_existing_user or after_invite_new_user
Defined Under Namespace
Classes: InviteForm
Instance Method Summary collapse
-
#create ⇒ Object
Create one or more Invite instances.
- #new ⇒ Object
Instance Method Details
#create ⇒ Object
Create one or more Invite instances.
invite: { invitable_id, invitable_type, email or emails:[] }
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'app/controllers/invitation/invites_controller.rb', line 22 def create failures = [] invites = InviteForm.new(invite_params).build_invites(current_user) ActiveRecord::Base.transaction do invites.each { |invite| invite.save ? do_invite(invite) : failures << invite.email } end logger.info "!!!!!!!!!!!!!!!!!!!!! INSIDE CREATE: current_user: #{current_user.inspect}" respond_to do |format| format.html do if failures.empty? flash[:notice] = t('invitation.flash.invite_issued', count: invites.count) else flash[:error] = t('invitation.flash.invite_error', count: failures.count, email: failures.to_sentence) end redirect_to url_after_invite(invites.first) # FIXME: redirect to back end format.json do if failures.empty? # If we received a single email, json response should be a scalar, not an array. invites = params[:invite].key?('email') ? invites.first : invites render json: invites.as_json(except: [:token, :created_at, :updated_at]), status: 201 else render json: { message: t('invitation.flash.invite_error', count: failures.count, email: failures.to_sentence), status: :unprocessable_entity } end end end end |
#new ⇒ Object
14 15 16 17 |
# File 'app/controllers/invitation/invites_controller.rb', line 14 def new @invite = InviteForm.new(invite_params) render template: 'invites/new' end |