Где разместить логику поиска модели в приложении Rails?

Я пытаюсь найти «лучшее» место для размещения логики многоатрибутной формы поиска в приложении Rails. Данная форма поиска имеет несколько атрибутов, которые могут иметь или не иметь значения, а типы данных различаются между атрибутами. (Например, существуют варианты поиска для поиска товаров с ценовым атрибутом между двумя числами, диапазонами дат, строковыми значениями и т. Д.) рассматриваемая модель имеет несколько вложенных атрибутов через отношения has_a / has_many, и некоторые из этих атрибутов также должны быть доступны для поиска.

Мантра Rails толстой модели, тонкого контроллера, заставляет меня колебаться, пытаясь объединить логику поиска в контроллере. Тем не менее, также не представляется целесообразным помещать логику, относящуюся к построению условий поиска, в модели (ях). Наконец, в духе «СУХОЙ» я не решаюсь жестко закодировать набор определенных имен атрибутов в некоторый модуль, поскольку мне нужно будет применить похожую логику поиска к нескольким несвязанным моделям. Возможно, соглашение об именовании полей формы в поисковом представлении можно использовать для построения правильных условий? (Что-то вроде использования префиксов, таких как "min_", "max_", "startdate_" с указанием типа данных и оператора условия поиска и суффикса, являющегося именем модели и / или атрибута?)

Я искал совет по этому вопросу, но большая часть рекомендаций кажется негибкой (жестко закодированные имена атрибутов, не поддерживающие вложенные атрибуты) или использовать поиск на основе маршрутов, который, я не думаю, будет работать для моих нужд (где 5-10 параметров могут быть использованы в поиске сразу).

Любые предложения по «способу Rails». это?

7
задан Chris Hart 28 August 2010 в 19:43
поделиться

1 ответ

Если вы используете 2.3.x, я всегда считал Searchlogic надежной и гибкой отправной точкой для поиска. Модели ActiveRecord, в которых не требуется полнотекстовый поиск. Он поддерживает ассоциации, ваши собственные именованные области видимости и т. д.

Если вы используете Rails 3, гем meta_search предлагает аналогичную функциональность, но мой опыт работы с ним крайне ограничен.

1
ответ дан 7 December 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: