# Preventing duplicate submission in Rails

I have a Rails app where doctors score patients on diagnosis - their score is the model Baseline. Each Baseline has a user id and a patient id and there should only be one baseline for each patient by a user. Very occasionally I have noticed that a user may create a new baseline (at which point he is then redirected to another page) but then presses the back button, be brought to the "new" action again and if he submits again, a duplicate baseline is created. Therefore I am writing some code to try to ensure this never happens.

First, I check that a baseline doesn't already exist with the current user id and the patient id at the controller "new" action.

     before_action :check_there_is_not_an_existing_baseline, only: [:new ]


and

 def check_there_is_not_an_existing_baseline
patient =  Patient.find(params[:patient])
@baseline = Baseline.where(user_id: current_user.id, patient_id: patient.id).first
if @baseline
flash[:notice] = "There was a problem with this action. Refresh the page and try again!"
redirect_to list_patients_path(:page =>  @current_page)
end
end


I also check at the create action in the model

 validate :duplicate_baselines, :on => :create

def duplicate_baselines
check_baseline = Baseline.where(user_id: self.user_id, patient_id: self.patient_id)
if !check_baseline.blank?
errors.add(:base, "There was an error. Go to 'patient list' and start again") unless check_baseline.first.new_record?
end
end


I am trying to learn more and my suspicion is that there is good Rails way to do this. Could an expert have a look and see if there is a neater solution?

# Baseline Model

That mean user_id can present many times in Baseline table, but only one can be connected to exact patient_id.