Мне нужно переопределить метод 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
, что сделано и работает, однако поиск, очевидно, не возвращает результаты по этим тегам ...
РЕДАКТИРОВАТЬ: Хорошо, поэтому после ответа Стефа я попытался:
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)