diff --git a/app/logical/concerns/searchable.rb b/app/logical/concerns/searchable.rb index 139968424..1e7d154e3 100644 --- a/app/logical/concerns/searchable.rb +++ b/app/logical/concerns/searchable.rb @@ -436,7 +436,7 @@ module Searchable end if parameter_hash?(params[attr]) - relation = relation.where(attr => model.visible(current_user).search(params[attr]).reorder(nil)) + relation = relation.includes(attr).references(attr).where(attr => model.visible(current_user).search(params[attr]).reorder(nil)) end relation diff --git a/app/models/upload_media_asset.rb b/app/models/upload_media_asset.rb index 9ff3b3a6c..64705e2be 100644 --- a/app/models/upload_media_asset.rb +++ b/app/models/upload_media_asset.rb @@ -3,4 +3,9 @@ class UploadMediaAsset < ApplicationRecord belongs_to :upload belongs_to :media_asset + + def self.search(params) + q = search_attributes(params, :id, :created_at, :updated_at, :upload, :media_asset) + q.apply_default_order(params) + end end diff --git a/test/unit/concerns/searchable.rb b/test/unit/concerns/searchable.rb index 0d6fd85a5..d640e5f6a 100644 --- a/test/unit/concerns/searchable.rb +++ b/test/unit/concerns/searchable.rb @@ -252,5 +252,17 @@ class SearchableTest < ActiveSupport::TestCase assert_search_equals(@p1, has_comments: true, comments: { id: @p1.comments.first.id }) end end + + context "for a `has_many through: ...` association" do + subject { Upload } + + should "work" do + @media_asset = create(:media_asset) + @upload1 = create(:upload, media_assets: [@media_asset]) + @upload2 = create(:upload, media_assets: [@media_asset]) + + assert_search_equals([@upload2, @upload1], media_asset: { md5: @media_asset.md5 }) + end + end end end