8
votes

Mise en œuvre d'une table de recherche dans les rails

J'utilise actuellement (ou essayez d'utiliser) une table de recherche pour représenter une colonne contenant une chaîne énumérée. J'ai eu de nombreuses discussions avec mon équipe pour vous assurer que c'est la direction que nous voulons aller et j'ai décidé de le poursuivre, mais malheureusement, aucun de nous ne savait que la table de recherche à la colonne à l'aide de migrations et s'il y a des changements qui ont des changements à effectuer dans le modèle / contrôleur / vues pour soutenir ce nouveau comportement.

J'ai beaucoup googlé et j'ai trouvé de bons exemples de faire cela donc j'espère que quelqu'un peut me dire un merveilleux lien avec un tutoriel que je viens de manquer dans ma recherche ou décrire comment faire cela. J'aimerais aussi savoir s'il y a un modèle de rails non officiel (ou officiel) pour cela.

Merci d'avance.


3 commentaires

Est-ce ce que vous essayez de faire? ROHITSHARMA9889.WordPress.com/2010 / 08/27 / ...


Il est proche ... une autre solution. Il se peut que simplement utiliser le concept Enum, nous obtenons ce que nous voulons. Une chose qui finit par ne pas être là-bas dans cette approche est un moyen de trier les valeurs ENUM de manière plus "contrôlable". Je voulais avoir la colonne être un entier afin que nous puissions trier ce tableau de manière par défaut et obtenir nos valeurs énumérées dans le bon ordre qui arrive à ne pas être alphabétique.


Lien mis à jour Sharmarohit.com/blog / 2010/08/27 / ...


3 Réponses :


5
votes

Si vous recherchez un moyen léger pour modéliser des énumérations / configuration sans créer de table séparée, consultez définitivement ActiveHash:

https://github.com/zilkey/active_hash


1 commentaires

Cette solution semble très belle! Je vais aller de cette façon, merci!



3
votes

J'ai rencontré le même problème que vous et résolu en créant un gemme qui ajoute une table de recherche dynamique de manière transparente dans le modèle. J'ai blogué ici ici: http://www.codelord.net/2011/08/09/guest-post-lookup-tables-with-Ruby-on-Rails/

Et le code est ici: https://github.com/nimster/railslookup


0 commentaires

1
votes

Je sais que c'est une vieille question, mais comme il est toujours le haut frappé sur Google, je pensais partager ma solution qui est emballée comme un joyau. Jeter un coup d'œil à https://github.com/blackrat/acts_as_enumération

du Readme:

Donc, si une table de base de données avait une colonne appelée "nom", déclarant

acts_as_enumeration: nom

sélectionnerait tous les éléments de cette colonne et ferions la cartographier dans un hachage à leurs valeurs principales.

En outre, il crée les méthodes d'instance est _ # {Key} où la clé est toutes les valeurs de cette colonne, est? (tableau) et is_not? (tableau) qui vérifie le type de ce tableau.

Garder le nom comme exemple de colonne, les méthodes de la classe ID_FOR_NAME renvoient la valeur de la clé principale pour ce mappage et ce nom de mappage et valide? (La valeur) dira si la table contient et la saisie dans la colonne Nom avec cette valeur.

Enfin, la méthode manquante permet d'identifier IS_ et IS_NOT enchaînant des méthodes, telles que IS_PAUL_OR_MICHAEL_OR_LUKE? qui a le même effet que (is_paul? || is_michael? || is_luke?) Ou est-ce? (: Paul ,: Michael ,: Luke) et IS_NOT_PAUL_OR_MICHAEL_OR_LIT QUE a le même effet que! (is_paul || is_michael? || is_muke? | ) Ou! Est? (: Paul ,: Michael ,: Luke)

CAVEATAIRE: En raison du mécanisme utilisé par la méthode_missing, si quelqu'un avait réellement le nom "pas Bruce", la requête de combinaison ne peut pas l'utiliser comme premier élément. c'est-à-dire "" pas "non seulement" pas Bruce ".

une combinaison d'is_not_bruce_or_paul? devrait être écrit is_paul_or_not_brice? avoir l'effet souhaité. is_not_not_bruce_or_paul est une bonne chose, mais les chances de ce lieu sont aussi susceptibles que quelqu'un qui s'appelle réellement "pas Bruce" en dehors d'un croquis de Monty Python.

(ce qui signifie que cela le fera probablement, alors avant de changer de code pour prendre en charge une nouvelle entrée, essayez de changer la commande)


1 commentaires

Il serait bon de créer un lien vers la gemme trop rubygems.org/gems/acts_as_enumération (ici et dans la configuration README / GITUB)