2011-01-22 2 views
6

Je dois dupliquer un champ BLOB d'une table dans une autre et je veux utiliser une requête INSERT-SELECT pour réaliser ceci.Puis-je effectuer une opération INSERT-SELECT avec l'API Rails?

INSERT INTO target_table (key, data, comment) 
    SELECT 'my key', data, 'some comment' FROM source_table 

peut-il être fait avec l'API Rails?

Bien sûr, je pourrais toujours utiliser ActiveRecord::Base.connection pour envoyer une requête native à la base de données, mais j'espère trouver une "méthode Rails" pour le faire. (Un qui n'implique pas réellement le chargement des données dans mon application Rails)

+0

Pour ceux d'entre nous qui ne sont pas aussi avertis dans la navigation dans la documentation Rails, cela n'aurait-il pas de sens d'avoir un exemple de l'appel de l'API ActiveRecord :: Base.connection ici? Je trouve ce non-évident à fouiller hors des docs .... – Philip

Répondre

3

Ceci est un scénario typique où l'utilisation directe du SQL en utilisant ActiveRecord::Base.connection est logique et sensible. Il ne peut pas y avoir de chemin de fer comme vous l'avez décrit. Même s'il devait y en avoir un, il doit le charger en mémoire et l'insérer dans la table cible impliquant deux modèles; c'est de la folie.

+3

J'ai tendance à être d'accord avec le scénario "scénario typique", mais pourquoi pensez-vous qu'il ne peut y avoir aucun moyen? Considérez simplement les trucs incroyables qu'Arel peut faire sans charger tout en mémoire. –

+0

Merci DR, c'est à partir de votre commentaire ci-dessus que j'ai appris à connaître Arel avec Rails-3. Donc je vote pour ça! Avec Arel, une requête comme celle en question est probablement possible. – karthiks

Questions connexes