From c691be6c9b4b25dea291ea4cfe7ea9b0de773c89 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Thu, 6 Jun 2019 06:18:11 +0100 Subject: [PATCH] Fix preload_first_topic_post on empty association Reported in https://github.com/thredded/thredded/commit/f1874fba333444255979c0789ba17f8dc24a4d6f#r33825204 --- app/models/concerns/thredded/post_common.rb | 1 + app/models/thredded/post_moderation_record.rb | 1 + spec/models/thredded/post_moderation_record_spec.rb | 9 +++++++++ 3 files changed, 11 insertions(+) create mode 100644 spec/models/thredded/post_moderation_record_spec.rb diff --git a/app/models/concerns/thredded/post_common.rb b/app/models/concerns/thredded/post_common.rb index 8cc564e4d..379be7f26 100644 --- a/app/models/concerns/thredded/post_common.rb +++ b/app/models/concerns/thredded/post_common.rb @@ -22,6 +22,7 @@ module PostCommon posts_table_name = quoted_table_name result = all owners_by_id = result.each_with_object({}) { |r, h| h[r.postable_id] = r.postable } + next result if owners_by_id.empty? preloader = ActiveRecord::Associations::Preloader.new.preload( owners_by_id.values, :first_post, unscoped.where(<<~SQL.delete("\n")) diff --git a/app/models/thredded/post_moderation_record.rb b/app/models/thredded/post_moderation_record.rb index 0ddd6b504..978d7e675 100644 --- a/app/models/thredded/post_moderation_record.rb +++ b/app/models/thredded/post_moderation_record.rb @@ -31,6 +31,7 @@ class PostModerationRecord < ActiveRecord::Base posts_table_name = Thredded::Post.quoted_table_name result = all owners_by_id = result.each_with_object({}) { |r, h| h[r.post.postable_id] = r.post.postable } + next result if owners_by_id.empty? preloader = ActiveRecord::Associations::Preloader.new.preload( owners_by_id.values, :first_post, Thredded::Post.unscoped.where(<<~SQL.delete("\n")) diff --git a/spec/models/thredded/post_moderation_record_spec.rb b/spec/models/thredded/post_moderation_record_spec.rb new file mode 100644 index 000000000..285f63a2c --- /dev/null +++ b/spec/models/thredded/post_moderation_record_spec.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Thredded::PostModerationRecord do + it 'empty preload_first_topic_post' do + expect { described_class.preload_first_topic_post.to_a }.not_to raise_error + end +end