Где разместить логику поиска модели в приложении Rails? - PullRequest
7 голосов
/ 28 августа 2010

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

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

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

Есть какие-нибудь предложения по "Rails-способу" для этого?

1 Ответ

1 голос
/ 29 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...