2010-08-28 6 views
7

J'essaye de trouver le «meilleur» endroit pour placer la logique de forme de recherche multi-attribut dans une application de Rails. Le formulaire de recherche en question a plusieurs attributs qui peuvent ou non avoir des valeurs, et les types de données diffèrent entre les attributs. (Par exemple, il existe des options de recherche pour rechercher des éléments avec un attribut de prix entre deux nombres, plages de dates, valeurs de chaîne, etc.) En outre, le modèle en question possède plusieurs attributs imbriqués via has_a/has_many relations et certains de ces attributs besoin d'être consultable. Le mantra Rails du modèle épais, contrôleur mince, me fait hésiter à essayer d'agréger la logique de recherche dans le contrôleur. Cependant, il ne semble pas approprié non plus de mettre une logique relative à la construction des conditions de recherche dans le (s) modèle (s). Enfin, dans l'esprit de DRY, j'hésite à coder en dur un ensemble de noms d'attributs spécifiques dans certains modules, car j'aurai besoin d'appliquer une logique de recherche similaire à plusieurs modèles non apparentés. Peut-être une convention de nommage des champs de formulaire dans la vue de recherche pourrait-elle être utilisée pour construire les bonnes conditions? (Quelque chose comme utiliser des préfixes comme "min_", "max_", "startdate_" indiquant le type de données et l'opérateur de condition de recherche et le suffixe étant le nom du modèle et/ou attribut?)Où mettre la logique de recherche de modèle dans une application Rails?

J'ai recherché des conseils à ce sujet, mais la plupart des conseils semblent inflexibles (noms d'attributs codés en dur, pas de prise en charge des attributs imbriqués) ou d'utiliser des recherches basées sur l'itinéraire qui ne fonctionneront pas selon mes besoins (où 5-10 paramètres peuvent être utilisés). recherche à la fois).

Vous avez des suggestions sur la façon "Rails" de le faire?

+1

Bonne question. Les questions intéressantes de Rails comme celui-ci recevront rarement beaucoup d'attention ici sur SO. Mais s'ils se font remarquer, vous pourriez obtenir de bonnes réponses. Consultez ma question ici http://stackoverflow.com/questions/1068558 qui est en fait liée (un peu). BTW, votre idée sur l'utilisation des noms d'attributs n'est pas mauvaise, et semble être une chose Railsy à faire. –

+1

Yar, merci pour le lien. Votre commentaire est certainement utile pour moi - je pensais de la même façon où je mettrais finalement la logique de recherche une fois que j'ai compris comment le faire. Après avoir posté ma question, je suis également tombé sur une présentation sur la recherche dans Rails: http://www.scribd.com/doc/3188387/Advanced-Searching-in-Rails. Je pense que la combinaison des approches présentées ici, la suggestion de Dave ci-dessous, et vos conseils sur l'organisation du code qui ne correspond pas parfaitement au paradigme du MVC formeront la base de ma solution. Merci! –

+0

Bien sûr, @ Chris Hart, et bonne chance. –

Répondre

1

Si vous utilisez la version 2.3.x, j'ai toujours trouvé Searchlogic comme point de départ solide et flexible pour la recherche de modèles ActiveRecord pour lesquels vous n'avez pas besoin de recherche de texte intégral. Il soutient des associations, vos propres champs d'application nommés, etc.

Si vous utilisez Rails 3, le joyau meta_search semble offrir des fonctionnalités similaires, mais mon expérience avec elle est extrêmement limitée.

+1

Je ne crois pas que ce soit une question sur la gemme que je peux jeter. C'était une question pertinente sur la façon d'organiser votre propre code dans une application de rails. – npiv

Questions connexes