Directly use ActiveRecord object instead of ID

This change will improve the performance by reducing unnecessary SELECT queries.
This commit is contained in:
Sebastian Serth
2023-02-18 19:28:26 +01:00
parent 6465404ebe
commit 40c7a50834
3 changed files with 5 additions and 6 deletions

View File

@ -8,7 +8,7 @@ module FileParameters
next true if file.nil? || file.hidden || file.read_only next true if file.nil? || file.hidden || file.read_only
# avoid that public files from other contexts can be created # avoid that public files from other contexts can be created
# `next` is similar to an early return and will proceed with the next iteration of the loop # `next` is similar to an early return and will proceed with the next iteration of the loop
next true if file.context_type == 'Exercise' && file.context_id != exercise.id next true if file.context_type == 'Exercise' && file.context != exercise
next true if file.context_type == 'Submission' && file.context.user != current_user next true if file.context_type == 'Submission' && file.context.user != current_user
next true if file.context_type == 'CommunitySolution' && controller_name != 'community_solutions' next true if file.context_type == 'CommunitySolution' && controller_name != 'community_solutions'

View File

@ -21,9 +21,8 @@ module SubmissionParameters
def merge_user(params) def merge_user(params)
# The study_group_id might not be present in the session (e.g. for internal users), resulting in session[:study_group_id] = nil which is intended. # The study_group_id might not be present in the session (e.g. for internal users), resulting in session[:study_group_id] = nil which is intended.
params.merge( params.merge(
user_id: current_user.id, user: current_user,
user_type: current_user.class.name, study_group_id: current_user.current_study_group_id
study_group_id: session[:study_group_id]
) )
end end
end end

View File

@ -3,8 +3,8 @@
module CodeOcean module CodeOcean
class FileNameValidator < ActiveModel::Validator class FileNameValidator < ActiveModel::Validator
def validate(record) def validate(record)
existing_files = File.where(name: record.name, path: record.path, file_type_id: record.file_type_id, existing_files = File.where(name: record.name, path: record.path, file_type: record.file_type,
context_id: record.context_id, context_type: record.context_type).to_a context: record.context)
if !existing_files.empty? && (!record.context.is_a?(Exercise) || record.context.new_record?) if !existing_files.empty? && (!record.context.is_a?(Exercise) || record.context.new_record?)
record.errors.add(:base, 'Duplicate') record.errors.add(:base, 'Duplicate')
end end