Possibilité de mapper les valeurs enum au type de chaîne au lieu de nombre entier
Enum attributs sont grands et je veux les utiliser. Mais la cartographie des valeurs enum en entier, il serait difficile de maintenir à la fois le code et la base de données. Aussi ma base de données serait très couplé avec mon code, je pense que je devrais considérer qu'une mauvaise chose.
Je sais que je peux utiliser une table de hachage pour organiser un enum attribut avec des paires clé/valeur, mais encore il serait beaucoup mieux d'être en mesure d'utiliser un tableau et la carte de la chaîne de valeurs dans la base de données.
Est-il de toute façon à la carte énumération des chaînes par défaut?
source d'informationauteur Eren CAY
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, il n'est pas possible avec Active Record intégré dans l'enum fonctionnalité. Cependant, il y a un peu de populaire 3ème partie joyaux qui font cela. La correspondance la plus proche de ce qui vient avec Active Record sont probablement enumerize et SimpleEnum.
Cependant, si vous cherchez quelque chose d'un peu différent, je le recommande ClassyEnum (divulgation complète: je l'ai écrit). Voici certains de mes notes sur la différence entre enumerize et SimpleEnum vs ClassyEnum:
Regardant le code pour enum, vous pouvez le faire (au moins en 4.1+): https://github.com/rails/rails/blob/master/activerecord/lib/active_record/enum.rb#L96-98 par le passage d'un hachage, par exemple:
Bien avec des résultats inattendus lors de l'accès, voir https://github.com/rails/rails/issues/16459
Mise à jour
Ce problème a été corrigé dans les Rails 5, voir https://github.com/rails/rails/commit/c51f9b61ce1e167f5f58f07441adcfa117694301. Merci Yuri.
Il semble qu'avec des Rails 5 API uniquement un enum attribut d'un modèle seront enregistrer dans la base de données as integermais sera publié dans les API de comme une chaîne de caractères (avec Activerecord::Sérialiseur).
Par exemple,
L'Article modèle:
Article sérialiseur:
Publiera le json suivants:
La réponse courte est non. Vous aurez besoin d'utiliser un gem (comme magie-enum) si vous voulez faire quelque chose, mais stocker des entiers.
Dans la DHP propres mots sur ce de la de commentaires sur la pull request qui a ajouté cette fonctionnalité:
Comment sur: