Есть ли способ смешать рельсы под названием "сфера" и "сфинкс"? - PullRequest
5 голосов
/ 06 октября 2011

Есть ли способ смешивания именованных областей и областей сфинкса?Я не могу поверить, что нет.

У меня есть индекс сфинкса на уроках.Как только пользователи приобретают уроки, у них появляется экран, на котором они могут видеть список всех своих уроков.Я хочу, чтобы они выполняли те же поиски, что и на уроках по всему сайту, но ограничиваясь теми, которые у них есть.

Это, очевидно, невозможно при использовании только сфинксовых областей, потому что я не индексирую данные о закупках, и при этом я не думаю, что должен это делать.

Есть ли способ сделать это?

Это то, что я до сих пор "комбинировал" две системы.Это кажется мне хаком, но это работает:

lesson_ids = current_user.active_products_by_type(:lessons).collect{|x| x.id}
@lessons = Lesson.active_scope.search :with => {:id => lesson_ids }

Ответы [ 2 ]

3 голосов
/ 07 октября 2011

Сложно сказать, подходит ли ваш обходной путь, учитывая, что я не уверен, каковы области действия active_products_by_type и active_scope (что такое сфинкс? Оба? Ни то, ни другое?).

Но вы не можете вызывать область AR при поисковом вызове, поскольку области AR встроены для создания запросов SQL. У Sphinx есть собственный протокол запросов, поэтому Thinking Sphinx добавил области Sphinx. К этому следует добавить, что Sphinx не может ссылаться на базу данных во время поиска (только при индексации), поэтому любая ссылка на данные, которые Sphinx не может увидеть, также не будет полезна.

Все это говорит, что в коде, вероятно, нет ничего, что позволило бы вам связать поисковый вызов с областью AR - и вы, вероятно, даже получите результаты обратно - но это потому, что область влияет на вызов Model.find, который Thinking Sphinx позволяет конвертировать результаты поиска в экземпляры модели В результате вы можете видеть объекты, а область AR применяется только к данной странице результатов поиска, и математика разбивки на страницы (количество страниц / общее количество результатов) будет ненадежной.

Ух, это немного эссе, но, надеюсь, это поможет ...

2 голосов
/ 14 ноября 2011

Полагаю, лучше заканчивать AR-областями, чтобы иметь возможность делать .include, .joins и т. Д .:

sphinx_scope(:visible) do
  { with: {is_visible: true} }
end

@items = Item.where(
  id: Item.visible.search_for_ids(nil,
    page: params[:page],
    with: {
      tag_id: @tag.id,
      category_id: current_category.id
    }
  )
).order(:id).includes(:photos)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...