9
votes

Rails - Ajout de champs personnalisés au moment de l'exécution à Activerecord

Vous savez comment certains suiveurs de bogues (et autres logiciels) vous permettent d'ajouter des champs personnalisés?

Typiquement, cela se fait avec une structure de données qui ressemble à ceci: p>

  Items
----------
 ID | NAME | ITEM_TYPE_ID


 FieldDefinitions
---------------------------------------
 ID | ITEM_TYPE_ID | FIELD_NAME | FIELD_TYPE

 FieldValues
---------------------------------------
ID | FIELD_ID | ITEM_ID | VALUE


0 commentaires

3 Réponses :


7
votes

quelque chose comme ...? XXX PRE>

ou, vous pouvez modifier P>

cfh[fv.field_definition.field_name] = fv.value


4 commentaires

Utiliser Inject serait probablement une meilleure forme. Comme self.field_values.inject ({}) {| mémo, fv | mémo [fv.field_definition] = fv} ou similaire.


C'est ce que je pensais que j'utilisais ... me demandait s'il y avait une façon plus "rubis" de faire cela ...


La façon habituelle ne serait probablement pas d'utiliser un hachage du tout et d'utiliser simplement les méthodes d'association générées, mais je suppose qu'il y a une raison pour laquelle vous avez choisi particulièrement un hachage ...?


Je pensais à personne.Meta [: Twitter] ou quelque chose du genre. N'hésitez pas à m'éduquer quelque chose de nettoyant :)



1
votes

Jetez un coup d'œil au ORM sympathique . Cela vous permet de travailler avec MySQL sans schéma. Il a été inspiré par ce Publication du blog sur la façon dont Friendfeed utilise MySQL pour stocker Données schématiques.

sympathique remplacerait ActiveCord, bien que vous puissiez utiliser assez facilement les modèles ACTiverecord.


3 commentaires

Pas exactement ce que je cherche, mais une trouvaille cool néanmoins. +1


Si vous considérez que vous envisagez des données de schéma, vous pouvez envisager d'utiliser une base de données de documents comme Couchdb ou MongoDB (voir railscasts.com/episodes/194-mongodb-and-mongomapper Pour une diffusion Web sur l'utilisation de MongoDB et du gemme Mongomapper dans une application Rails; Ryan Bates est génial BTW).


Oui, je suis définitivement intéressé par cela. Je suis sur Heroku, qui ne fonctionnera pas avec MongoDB.



1
votes

Si votre intention est d'avoir votre FieldDefinition Enregistrés appartenant à Différents modèles différents (par exemple, une colonne item_id qui pointe sur un < Code> SpeekyToyitem ou un Balloonitem ) Alors ce que vous voulez est une association polymorphe.

Il vous permet essentiellement d'avoir une colonne item_Type (à côté de votre colonne item_id ), qui spécifie ensuite le type d'élément réel qu'il pointe.

Il y a une rubrique "associations polymorphes" dans la documentation de ACTIVERCORD :: Associations :: ClasseMethods .


1 commentaires

J'ai l'intention de les avoir sur de nombreux modèles, mais ils hériteront tous d'un article (ou tout ce que ma classe de base finit par être)