Мне нужно переопределить метод get_products_conditions_for
в этом классе, как лучше всего это сделать?
Я попытался добавить это к инициализатору:
Spree::Search::Base.class_eval do
def get_products_conditions_for(base_scope, query)
base_scope.like_any([:name, :description], query.split) | base_scope.joins("JOIN taggings on taggings.taggable_id = spree_products.id JOIN tags on tags.id = taggings.tag_id").where("tags.name = ?", query.split)
end
end
что приводит к этой ошибке при запуске сервера: uninitialized constant Spree::Search (NameError)
Я также пытался добавить это в "/lib/spree/search/base.rb" и "/lib/spree/search/tags_search.rb"
module Spree::Search
class TagsSearch < Spree::Search::Base
def get_products_conditions_for(base_scope, query)
base_scope.like_any([:name, :description], query.split) | base_scope.joins("JOIN taggings on taggings.taggable_id = spree_products.id JOIN tags on tags.id = taggings.tag_id").where("tags.name = ?", query.split)
end
end
end
а потом Spree::Config.searcher = TagsSearch
в application.rb...
Я даже пытался полностью заменить файл, поместив реплику в ту же структуру каталогов в приложении, либо ничего не происходит, либо я получаю упомянутые ошибки...
То, что я пытаюсь сделать, это интегрировать acts_as_taggable_on
, что сделано и работает, однако поиск, очевидно, не возвращает результатов по этим тегам...
EDIT: Итак, после ответа Стефа я попробовал:
module Spree::Search
class TagsSearch < Spree::Search::Base
def get_products_conditions_for(base_scope, query)
base_scope.like_any([:name, :description], query.split) | base_scope.joins("JOIN taggings on taggings.taggable_id = spree_products.id JOIN tags on tags.id = taggings.tag_id").where("tags.name = ?", query.split)
end
end
end
в app/models/search/tags_search.rb
и код, предложенный Стеф в lib/spree/search/tags_search.rb
и это:
config.to_prepare do
Spree::Core::Search::Base.send(:include, TagsSearch)
end
in config/environments/development.rb
что приводит к следующему при запуске сервера:
uninitialized constant TagsSearch (NameError)