Используя или / || в поиске Sunspot - PullRequest
0 голосов
/ 05 февраля 2012

Как я могу использовать 'или' в поиске Sunspot?

В моем коде у меня есть

with(:location_id, current_user.location.path_ids || current_user.location.parent.descendant_ids)

При поиске оценивается только первая часть.

Если я сначала поставлю 'current_user.location.path_ids' (до ||), я получу только записи, полученные в результате этого поиска. Если я сначала поставлю 'current_user.location.parent.descendant_ids', я получу результаты этого поиска. Я хочу результаты обоих.

Я тоже пробовал

with(:location_id, current_user.location.path_ids || :location_id, current_user.location.parent.descendant_ids)

Надеюсь, вы понимаете мой вопрос.

Ответы [ 2 ]

2 голосов
/ 05 февраля 2012

|| является оператором Ruby. Этот код в основном оценивает выражение current_user.location.path_ids || current_user.location.parent.descendant_ids и передает это значение в качестве второго аргумента методу with.

Проверьте Солнечный пятно README . Я думаю, что вам нужно any_of:

any_of do
  with(:location_id, current_user.location.path_ids)
  with(:location_id, current_user.location.parent.descendant_ids)
end
1 голос
/ 05 февраля 2012

Хотя я не использовал Sunspot, я думаю, что вижу проблему.

Оператор || является логическим ИЛИ, поэтому он возвращает левый операнд, поскольку он оценивает значение true.

Я предполагаю, что current_user.location.path_ids и current_user.location.parent.descendant_ids являются массивами, поэтому вам нужно будет объединить их с оператором |.

with(:location_id, current_user.location.path_ids | current_user.location.parent.descendant_ids)
...