2013-01-03 3 views
2

En travaillant avec ActiveRecord et JRuby, j'essaie d'appeler une procédure stockée sur une base de données. En utilisant la bibliothèque Java sous-jacente, j'ai atteint un point où j'ai un hachage avec les colonnes spécifiées dans le select. Maintenant, je voudrais utiliser ce hachage pour avoir des modèles ActiveRecord, mais je voudrais qu'ils ressemblent si j'ai fait un classique Model.select (colonnes) .all (avec seulement les valeurs des colonnes, les erreurs lors de l'essai pour atteindre les autres et en lecture seule).Comment instancier manuellement des objets tronqués ActiveRecord?

Il doit y avoir quelque chose à l'intérieur de AR pour faire cela, mais je ne peux pas trouver quoi que ce soit et toute ma recherche conduit à tous les tutoriels « fetch » de base ...

+2

Affichez vos idées! –

+0

@NicolasBlanco Eh bien pour l'instant je n'ai pas beaucoup essayé. J'ai un hash comme {'id' => 4, 'name' => 'Foo', 'some_column' => 'Bar'} donc tout ce que je fais est MyModel.new (hash) .readonly !. Ce n'est pas une solution idéale car toutes les autres colonnes sont définies avec leur valeur par défaut et si ma procédure stockée renvoie une valeur calculée, elle ne correspondra pas. J'ai le sentiment que ma réponse est autour de la méthode #instantiate d'ActiveRecord mais je ne trouve aucune documentation de ce qu'il fait ... –

Répondre

0

OK alors j'ai continué à creuser dans le code Rails et compris ma réponse était la méthode instantiate.

L'idée est que si vous êtes à l'intérieur d'un modèle appelé MyModel et faire ce

object = instantiate(value1: 1, value2: 'ok') 

vous aurez une instance de la classe MyModel avec les thèses attributs définis. Si le modèle est supposé avoir plus de colonnes, elles ne sont pas définies. L'objet est en lecture seule.

Questions connexes