Cos'è esattamente Arel in Rails 3.0?
È un modello a oggetti per un'algebra di operatori di query relazionali.
Capisco che sia un sostituto per ActiveRecord
No, non lo è. È un sostituto per la creazione manuale di query SQL in stringhe. È un livello di query comune alla base di ActiveRecord, ma può anche essere utilizzato come supporto per DataMapper, ad esempio.
Se è un sostituto per qualcosa, è un sostituto per Ambition. Oppure puoi pensarla come una versione Ruby degli operatori di query standard LINQ o dell'alchimia SQL di Python. (In effetti, l'autore cita esplicitamente sia LINQ che SQLAlchemy come ispirazione.)
Oppure puoi vederlo come un sostituto di named_scope
s. In effetti, ARel è praticamente la realizzazione dell'idea che "ogni query è una named_scope
". E, whaddayaknow: entrambi sono stati scritti dallo stesso ragazzo.
e che utilizza oggetti invece di query.
No, utilizza gli oggetti come query.
perché è meglio?
Ruby è un linguaggio orientato agli oggetti, non un linguaggio orientato alle stringhe. Per questo motivo da solo , ha senso per rappresentare le query come oggetti invece di stringhe. La creazione di un modello a oggetti appropriato per le query invece di utilizzare stringhe per tutto offre praticamente gli stessi vantaggi offerti dalla creazione di un modello a oggetti appropriato per un sistema di contabilità invece di utilizzare stringhe per tutto.
Un altro grande vantaggio è che ARel implementa un'effettiva algebra di operatori di query. In altre parole, ARel conosce le regole matematiche per la costruzione e la composizione delle query. Se concatenate due stringhe, ognuna delle quali contiene una query SQL valida, probabilmente il risultato non sarà una query SQL valida. O, peggio ancora, è una query SQL valida, ma che non ha senso, o che fa qualcosa di completamente diverso da quello che pensi che faccia. Questo non può mai accadere con ARel. (Questo è ciò che l'articolo a cui collego di seguito significa "chiuso in composizione".)
gli oggetti / le query saranno "più facili" da creare?
Sì. Ad esempio, come ho detto sopra, è molto più facile costruire query più complesse da parti più semplici.
porterà a query SQL più efficienti?
Sì. Il fatto che ARel disponga di un modello a oggetti appropriato per le query significa che può eseguire ottimizzazioni su tali query molto prima che generi una query SQL effettiva.
sarà compatibile con tutti i principali DB? - Suppongo che lo farà.
Sì. In effetti, ho sempre parlato di SQL sopra, ma in realtà un'algebra di query relazionale può generare query praticamente per tutto. Ancora una volta, vedi LINQ o Ambition come esempi: entrambi possono eseguire query su SQL, LDAP, ActiveResource, CouchDB, Amazon, Google, ... tutti con la stessa sintassi.
Forse la migliore discussione su cosa sia ARel e perché Nick Kallen ha scritto è l'articolo dal nome appropriato Why Arel? dallo stesso Nick Kallen . Nota: l'articolo contiene un po 'di gergo matematico e informatico mite, ma questo è esattamente il punto: ARel ha delle solide basi in matematica e informatica, quelle basi sono ciò che gli conferisce le sue potenti proprietà.