2009-08-05 3 views
8

J'envisage d'utiliser Sequel pour certains de mes SQL plus poilus que je trouve trop difficile à créer dans Active Record.Suite à des enregistrements avec ActiveRecord?

Y a-t-il des choses que je dois savoir lorsque vous utilisez Sequel et ActiveRecord sur le même projet? (En dehors de ceux évidents comme aucune validation AR dans la suite etc ...)

Répondre

20

Désistement: Je suis le mainteneur de Sequel.

Sequel est facile à utiliser à côté ou à la place d'ActiveRecord lors de l'utilisation de Rails. Vous devez configurer manuellement la connexion à la base de données, mais à part cela, l'utilisation est similaire.Vos fichiers modèles Sequel vont dans les applications/modèles et fonctionnent de manière similaire aux modèles ActiveRecord.

La configuration des connexions à la base de données n'est pas fastidieuse, c'est généralement une ligne dans environment.rb qui nécessite une suite, et une ligne dans chaque fichier d'environnement (development.rb, test.rb, production.rb) pour faire quelque chose comme :

DB = Sequel.connect (...)

il est seulement fastidieux si vous considérez 4 lignes de code de configuration fastidieuse. L'utilisation de SQL brut n'est généralement pas un problème, sauf si vous ciblez plusieurs bases de données. La raison principale pour l'éviter est la verbosité accrue. Sequel prend en charge l'utilisation de SQL brut au moins aussi facilement que ActiveRecord, mais les temps où vous devez utiliser du SQL brut sont généralement assez rares dans Sequel.

BTW, Sequel est livré avec plusieurs plugins de validation. Le plugin validation_class_methods est similaire aux validations ActiveRecord, en utilisant des méthodes de classe. Le plugin validation_helpers a une implémentation plus simple utilisant des méthodes de niveau d'instance, mais les deux peuvent faire à peu près la même chose. Enfin, je dirai que si vous avez déjà du code ActiveRecord qui fait ce que vous voulez, cela ne vaut probablement pas la peine de porter le code sur Sequel à moins que vous ne prévoyiez d'ajouter des fonctionnalités.

+0

J'espère ne pas être apparu comme anti-Sequel, btw: c'est en fait mon option préférée en dehors de Rails. Je ne vois pas beaucoup d'avantages à utiliser les deux bibliothèques ensemble, juste pour obtenir un peu plus d'indépendance de la plate-forme, même lorsque le SQL devient complexe. Je pense que c'est exagéré, surtout si le développeur sait déjà ce qu'il veut écrire. Le remaniement d'un tel SQL personnalisé n'était certainement pas le plus gros problème lié à la base de données auquel je devais faire face lorsque je devais passer de MySQL à Oracle! –

+0

Une astuce sur comment obtenir un objet db suite à partir d'une connexion d'enregistrement active? – fotanus

3

Personnellement, je ne le ferais pas. Gérer simplement plus ou moins la connexion à la main serait fastidieux, pour commencer. Je serais plus enclin, si je pensais que Sequel était l'option la plus forte, à attendre pour Rails 3.0 (ou peut-être commencer à développer Edge Rails) où il devrait être assez facile de changer de ORM, si Yehuda et co font leur truc . Beaucoup plus Merb que maintenant, au moins.

Ce fut la prise de DHP sur le sujet (je ne dis pas qu'il devrait être considéré comme la vérité de l'Evangile, l'esprit, mais il est, pour ainsi dire, de la bouche du cheval):

Mais n » t Sql sale?

Depuis les programmeurs ont commencé à des systèmes orientés objet couche sur le dessus de bases de données relationnelles, ils ont eu du mal à la question de la façon dont profonde pour exécuter l'abstraction. Certains mappeurs objet-relationnel cherchent éradiquer l'utilisation de SQL entièrement, en cherchant la pureté orientée objet forçant toutes les requêtes à travers une autre couche OO .

Enregistrement actif ne fonctionne pas. Il a été construit sur la notion que SQL n'est ni sale ni mauvais, juste verbeux dans les cas triviaux . L'accent est mis sur supprimant la nécessité de traiter la verbosité dans ces cas triviaux, mais en gardant l'expressivité autour de requêtes dures - le type SQL a été créé pour faire face à élégamment.

Par conséquent, vous ne devriez pas se sentir coupable lorsque vous utilisez find_by_sql() pour gérer soit les goulots d'étranglement ou des disques requêtes. Commencez à utiliser l'interface orientée objet pour la productivité et le plaisir et le creux sous la surface pour une expérience proche du métal lorsque vous avez besoin de .

(citation a été trouvé here, le texte original est sur P334 de AWDRWR, le livre "hamac").

Je pense que c'est raisonnable.

Parlons-nous de quelque chose que find_by_sql ne peut pas gérer? Ou est-ce que nous parlons de choses non-SELECT complexes que execute ne peut pas traiter?

Des exemples que nous pourrions regarder?

+0

Tous les trucs que je regarde s'exécutent et find_by_sql et sanitize_sql_array peuvent gérer. Je suis juste un peu mal à l'aise d'avoir SQL codé en dur, ce qui est vraiment étrange, puisque je suis un développeur SQL assez fort. J'aime les qualités de LINQ que cette suite semble montrer. Mais vous avez peut-être raison, peut-être que je devrais juste apprendre à accepter de se salir avec SQL dans une application rails lorsque la performance est critique. –

+0

C'était une réponse intéressante. J'ai cherché des options et cette conversation a été utile. – uadrive

+0

Eh bien, avec Sequel, vous êtes libre de créer vos propres instructions SQL. Et ce n'est pas basé sur la notion que SQL est sale ou mauvais non plus. Mais c'est utile dans ce cas car il est plus modulaire, et vous pouvez l'utiliser plus facilement pour construire des requêtes partiellement construites à la main et construites en partie avec un outil puissant. –

Questions connexes