Qu’est-ce qu’Arel dans Rails 3.0?

Je comprends que c’est un remplacement pour ActiveRecord et qu’il utilise des objects au lieu de requêtes.

Mais…

pourquoi est-ce mieux?

les objects / requêtes seront-ils “plus faciles” à créer?

cela conduira-t-il à des requêtes SQL plus efficaces?

sera-t-il compatible avec tous les principaux DB? – Je suppose que ça va.

sera-t-il plus facile / difficile d’utiliser des procédures stockées?

Qu’est-ce qu’Arel dans Rails 3.0?

C’est un modèle d’object pour une algèbre d’opérateurs de requêtes relationnelles.

Je comprends que c’est un remplacement pour ActiveRecord

Non, ce n’est pas C’est un remplacement pour les requêtes SQL à la main dans les chaînes. C’est une couche de requête commune qui soustend ActiveRecord, mais elle peut également servir de base à DataMapper, par exemple.

Si c’est un remplacement pour quelque chose, c’est un remplacement pour Ambition. Ou, vous pouvez le considérer comme une version Ruby des opérateurs de requête standard LINQ ou SQLAlchemy de Python. (En fait, l’auteur cite explicitement LINQ et SQLAlchemy comme sources d’inspiration.)

Ou, vous pouvez le voir en remplacement de named_scope s. En fait, ARel est à peu près la réalisation de l’idée que “chaque requête est un named_scope “. Et, whaddayaknow: les deux ont été écrites par le même gars.

et qu’il utilise des objects au lieu de requêtes.

Non, il utilise des objects comme requêtes.

pourquoi est-ce mieux?

Ruby est un langage orienté object, pas un langage orienté chaîne. Pour cette seule raison, il est logique de représenter les requêtes en tant qu’objects au lieu de chaînes. Construire un modèle d’object approprié pour les requêtes au lieu d’utiliser des chaînes pour tout vous donne à peu près les mêmes avantages que la création d’un modèle d’object approprié pour un système comptable au lieu d’utiliser des chaînes pour tout ce que vous donnez.

Un autre gros avantage est que ARel implémente une algèbre réelle des opérateurs de requêtes. En d’autres termes, ARel connaît les règles mathématiques pour construire et composer des requêtes. Si vous concaténez deux chaînes contenant chacune une requête SQL valide, le résultat ne sera probablement pas une requête SQL valide. Ou pire encore, il s’agit d’ une requête SQL valide, mais qui n’a pas de sens, ou qui fait quelque chose de totalement différent de ce que vous pensez. Cela ne peut jamais arriver avec ARel. (C’est ce que l’article auquel je fais référence ci-dessous signifie avec “fermé sous la composition”.)

les objects / requêtes seront-ils “plus faciles” à créer?

Oui. Par exemple, comme je l’ai mentionné ci-dessus, il est beaucoup plus facile de construire des requêtes plus complexes à partir de parties plus simples.

cela conduira-t-il à des requêtes SQL plus efficaces?

Oui. Le fait qu’ARel dispose d’un modèle d’object approprié pour les requêtes signifie qu’il peut effectuer des optimisations sur ces requêtes bien avant de générer une requête SQL réelle.

sera-t-il compatible avec tous les principaux DB? – Je suppose que ça va.

Oui. En fait, j’ai toujours parlé de SQL ci-dessus, mais en réalité, une algèbre de requêtes relationnelle peut générer des requêtes pour à peu près tout. Encore une fois, voir LINQ ou Ambition comme exemples: les deux peuvent interroger SQL, LDAP, ActiveResource, CouchDB, Amazon, Google, etc. avec la même syntaxe.

Peut-être la meilleure discussion sur ce qu’est ARel et pourquoi Nick Kallen a-t-il écrit est l’article avec justesse Pourquoi Arel? par Nick Kallen lui-même. Note: l’article contient un jargon mathématique et informatique doux, mais c’est justement le but: ARel a des bases solides en mathématiques et en informatique, ces fondements lui donnent ses propriétés puissantes.

ARel, malheureusement lié directement à la génération de SQL, est donc inadapté aux besoins de DataMapper.

Je dirais que ARel est un modèle de requête explicite pour ActiveRecord qui génère et optimise les requêtes SQL pour les SGBDR.

DataMapper, quant à lui, est un véritable mappeur de données et peut déjà interfacer avec des magasins de données non relationnels. À l’avenir, DataMapper inclura probablement une bibliothèque distincte appelée Veritas, destinée à fournir des fonctionnalités relationnelles aux données provenant de N’IMPORTE QUEL magasin de données, et pas seulement aux RDBMS.

Arel dans Rails 3 crée des objects de relation où la firebase database n’est pas interrogée tant que vous n’en avez pas besoin. Beaucoup plus efficace.

C’est aussi plus naturel (une fois qu’on s’y est habitué) ce qui est vraiment la grande force de Rails.

En fait, j’ai commencé une série de vidéos sur ActiveRelation.

Le premier tutoriel général peut être consulté sur http://Innovative-Studios.com/#pilot