diff --git a/app/controllers/passport_confirmations_controller.rb b/app/controllers/passport_confirmations_controller.rb index e949202..c081d75 100644 --- a/app/controllers/passport_confirmations_controller.rb +++ b/app/controllers/passport_confirmations_controller.rb @@ -10,7 +10,7 @@ class PassportConfirmationsController < ApplicationController ActiveRecord::Base.transaction do ConfirmPassport.call(passport: @passport, user: current_user).tap do |context| - authorize context.passport_confirmation + authorize_if_present context.passport_confirmation end end @@ -22,4 +22,12 @@ private def set_passport @passport = Passport.find params[:passport_id] end + + def authorize_if_present(record) + if record + authorize record + else + skip_authorization + end + end end diff --git a/app/interactors/confirm_passport.rb b/app/interactors/confirm_passport.rb index a15d7c7..1b4b1bd 100644 --- a/app/interactors/confirm_passport.rb +++ b/app/interactors/confirm_passport.rb @@ -9,10 +9,12 @@ class ConfirmPassport end def create_passport_confirmation - context.passport_confirmation = + passport_confirmation = context.passport.passport_confirmations.build user: context.user - context.fail! unless context.passport_confirmation.save + context.fail! passport_confirmation: nil unless passport_confirmation.save + + context.passport_confirmation = passport_confirmation end def confirm_passport diff --git a/app/models/passport_confirmation.rb b/app/models/passport_confirmation.rb index fef5af2..b2c0bb4 100644 --- a/app/models/passport_confirmation.rb +++ b/app/models/passport_confirmation.rb @@ -5,4 +5,14 @@ class PassportConfirmation < ApplicationRecord belongs_to :user validates :user_id, uniqueness: { scope: :passport_id } + + validate :passport_has_image + +private + + def passport_has_image + return if passport.nil? + + errors.add :passport, 'must have an image' if passport.image.nil? + end end diff --git a/app/views/passports/show.html.erb b/app/views/passports/show.html.erb index 5e790c0..ceaf292 100644 --- a/app/views/passports/show.html.erb +++ b/app/views/passports/show.html.erb @@ -7,7 +7,7 @@
- <% if user_signed_in? %> + <% if @passport.image && user_signed_in? %> <% if @passport.passport_confirmations.where(user: current_user).exists? %>