From 008d29fcd009e4acc27186096d89b530bb80d8b3 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Fri, 22 Jan 2021 23:28:07 +0100 Subject: [PATCH 1/3] Improve performance for everyone_in_study_group --- app/policies/application_policy.rb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/policies/application_policy.rb b/app/policies/application_policy.rb index 28f33b7c..1b913945 100644 --- a/app/policies/application_policy.rb +++ b/app/policies/application_policy.rb @@ -31,20 +31,19 @@ class ApplicationPolicy study_group = @record.study_group return false if study_group.blank? - users_in_same_study_group = study_group.users + study_groups = [study_group] elsif @record.respond_to? :user # e.g. exercise + # ToDo: Add role to study_group_membership and use for check study_groups = @record.user.study_groups - users_in_same_study_group = study_groups.collect(&:users).flatten elsif @record.respond_to? :users # e.g. study_group - users_in_same_study_group = @record.users + study_groups = [@record] elsif @record.respond_to? :study_groups # e.g. user study_groups = @record.study_groups - users_in_same_study_group = study_groups.collect(&:users).flatten else return false end - users_in_same_study_group.include? @user + @user.study_groups.any?{|i| study_groups.include?(i) } end private :everyone_in_study_group From 3b58cadbebe46ba619df2fba7a3a6f3c82392206 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Sat, 23 Jan 2021 00:25:54 +0100 Subject: [PATCH 2/3] Improve performance for study_group_policy.rb --- app/policies/study_group_policy.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/policies/study_group_policy.rb b/app/policies/study_group_policy.rb index 3dd29aeb..f19af1f1 100644 --- a/app/policies/study_group_policy.rb +++ b/app/policies/study_group_policy.rb @@ -4,7 +4,7 @@ class StudyGroupPolicy < AdminOnlyPolicy end [:show?, :destroy?, :edit?, :update?, :stream_la?].each do |action| - define_method(action) { admin? || @user.teacher? && @record.present? && @record.users.include?(@user) } + define_method(action) { admin? || @user.teacher? && @record.present? && @user.study_groups.exists?(@record.id) } end class Scope < Scope From 72b3524b18090484a66abf60e793e1f44c1440d9 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Sat, 23 Jan 2021 00:28:11 +0100 Subject: [PATCH 3/3] Leverage PostgreSQL count for study group size --- app/models/study_group.rb | 4 ++++ app/views/study_groups/index.html.slim | 2 +- app/views/study_groups/show.html.slim | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/models/study_group.rb b/app/models/study_group.rb index b9e2200a..9c9a7f46 100644 --- a/app/models/study_group.rb +++ b/app/models/study_group.rb @@ -11,6 +11,10 @@ class StudyGroup < ApplicationRecord external_users + internal_users end + def user_count + external_users.count + internal_users.count + end + def to_s if name.blank? "StudyGroup " + id.to_s diff --git a/app/views/study_groups/index.html.slim b/app/views/study_groups/index.html.slim index 6b7e07bf..af0ba826 100644 --- a/app/views/study_groups/index.html.slim +++ b/app/views/study_groups/index.html.slim @@ -25,7 +25,7 @@ h1 = StudyGroup.model_name.human(count: 2) td code = group.external_id td = link_to_if(policy(group.consumer).show?, group.consumer, group.consumer) - td = group.users.count + td = group.user_count td = link_to(t('shared.show'), group) if policy(group).show? td = link_to(t('shared.edit'), edit_study_group_path(group)) if policy(group).edit? td = link_to(t('shared.destroy'), group, data: {confirm: t('shared.confirm_destroy')}, method: :delete) if policy(group).destroy? diff --git a/app/views/study_groups/show.html.slim b/app/views/study_groups/show.html.slim index 613ab6f3..073cd0fe 100644 --- a/app/views/study_groups/show.html.slim +++ b/app/views/study_groups/show.html.slim @@ -7,7 +7,7 @@ h1 = row(label: 'study_group.external_id') do code = @study_group.external_id = row(label: 'study_group.consumer', value: link_to_if(policy(@study_group).show?, @study_group.consumer, @study_group.consumer)) -= row(label: 'study_group.member_count', value: @study_group.users.count) += row(label: 'study_group.member_count', value: @study_group.user_count) h2.mt-4 = t('activerecord.attributes.study_group.members')