diff --git a/app/controllers/prompts/cards_controller.rb b/app/controllers/prompts/cards_controller.rb index 77a64178f..bb8c0dfc5 100644 --- a/app/controllers/prompts/cards_controller.rb +++ b/app/controllers/prompts/cards_controller.rb @@ -20,7 +20,7 @@ class Prompts::CardsController < ApplicationController def search_cards published_cards - .mentioning(params[:filter]) + .mentioning(params[:filter], board_ids: Current.user.board_ids) .reverse_chronologically .limit(MAX_RESULTS) end diff --git a/app/models/card/searchable.rb b/app/models/card/searchable.rb index fc01cce20..8254f5983 100644 --- a/app/models/card/searchable.rb +++ b/app/models/card/searchable.rb @@ -4,11 +4,17 @@ module Card::Searchable included do include ::Searchable - scope :mentioning, ->(query) do - cards = Card.search(query).select(:id).to_sql - comments = Comment.search(query).select(:id).to_sql + scope :mentioning, ->(query, board_ids:) do + query = Search::Query.wrap(query) - left_joins(:comments).where("cards.id in (#{cards}) or comments.id in (#{comments})").distinct + if query.valid? + joins("INNER JOIN search_index ON search_index.card_id = cards.id AND search_index.board_id = cards.board_id") + .where("search_index.board_id IN (?)", board_ids) + .where("MATCH(search_index.content, search_index.title) AGAINST(? IN BOOLEAN MODE)", query.to_s) + .distinct + else + none + end end end diff --git a/app/models/concerns/searchable.rb b/app/models/concerns/searchable.rb index c94be9193..5620d41c1 100644 --- a/app/models/concerns/searchable.rb +++ b/app/models/concerns/searchable.rb @@ -5,18 +5,6 @@ module Searchable after_create_commit :create_in_search_index after_update_commit :update_in_search_index after_destroy_commit :remove_from_search_index - - scope :search, ->(query) do - query = Search::Query.wrap(query) - - base = joins("INNER JOIN search_index ON search_index.searchable_type = '#{name}' AND search_index.searchable_id = #{table_name}.id") - - if query.valid? - base.where("MATCH(search_index.content, search_index.title) AGAINST(? IN BOOLEAN MODE)", query.to_s) - else - base.none - end - end end def reindex diff --git a/app/models/filter.rb b/app/models/filter.rb index 005e04e28..c9711c10c 100644 --- a/app/models/filter.rb +++ b/app/models/filter.rb @@ -33,7 +33,7 @@ class Filter < ApplicationRecord result = result.closed_at_window(closure_window) if closure_window result = result.closed_by(closers) if closers.present? result = terms.reduce(result) do |result, term| - result.mentioning(term) + result.mentioning(term, board_ids: creator.board_ids) end result