Apa sebenarnya Arel di Rails 3.0 itu?
Ini adalah model objek untuk aljabar operator kueri relasional.
Saya mengerti bahwa ini adalah pengganti ActiveRecord
Tidak, tidak. Ini adalah pengganti untuk kueri SQL yang dibuat dengan tangan dalam string. Ini adalah lapisan kueri umum yang mendasari ActiveRecord, tetapi juga dapat digunakan sebagai pendukung untuk DataMapper, misalnya.
Jika itu adalah pengganti untuk apa pun, itu adalah pengganti Ambisi. Atau, Anda dapat menganggapnya sebagai versi Ruby dari operator kueri standar LINQ atau SQLAlchemy Python. (Faktanya, penulis secara eksplisit mengutip LINQ dan SQLAlchemy sebagai inspirasi.)
Atau, Anda dapat melihatnya sebagai pengganti named_scope
s. Faktanya, ARel adalah realisasi dari gagasan bahwa "setiap kueri adalah named_scope
". Dan, whaddayaknow: keduanya ditulis oleh orang yang sama.
dan menggunakan objek, bukan kueri.
Tidak, ini menggunakan objek sebagai kueri.
mengapa ini lebih baik?
Ruby adalah bahasa berorientasi objek, bukan bahasa berorientasi string. Untuk alasan itu saja , masuk akal untuk merepresentasikan kueri sebagai objek, bukan string. Membangun model objek yang tepat untuk kueri alih-alih menggunakan string untuk semuanya memberi Anda manfaat yang hampir sama dengan membangun model objek yang tepat untuk sistem akuntansi daripada menggunakan string untuk semuanya memberi Anda.
Keuntungan besar lainnya adalah ARel mengimplementasikan aljabar sebenarnya dari operator kueri. Dengan kata lain, ARel tahu tentang aturan matematika untuk membangun dan menyusun kueri. Jika Anda menggabungkan dua string, yang masing-masing berisi kueri SQL yang valid, hasilnya mungkin tidak akan menjadi kueri SQL yang valid. Atau, lebih buruk lagi, ini adalah kueri SQL yang valid, tetapi tidak masuk akal, atau melakukan sesuatu yang sama sekali berbeda dari yang Anda pikirkan. Ini tidak akan pernah terjadi dengan ARel. (Inilah arti dari artikel yang saya tautkan di bawah dengan "komposisi tertutup".)
akankah objek / kueri "lebih mudah" dibuat?
Iya. Misalnya, seperti yang saya sebutkan di atas, jauh lebih mudah untuk membuat kueri yang lebih kompleks dari bagian yang lebih sederhana.
apakah ini akan menghasilkan kueri SQL yang lebih efisien?
Iya. Fakta bahwa ARel memiliki model objek yang tepat untuk kueri berarti bahwa ARel dapat melakukan pengoptimalan pada kueri tersebut jauh sebelum menghasilkan kueri SQL yang sebenarnya.
apakah itu akan kompatibel dengan semua DB utama? - Saya kira itu akan.
Iya. Sebenarnya, saya selalu berbicara tentang SQL di atas, tetapi sebenarnya aljabar kueri relasional dapat menghasilkan kueri untuk hampir semua hal. Sekali lagi, lihat LINQ atau Ambition sebagai contoh: keduanya dapat melakukan kueri SQL, LDAP, ActiveResource, CouchDB, Amazon, Google,… semuanya dengan sintaks yang sama.
Mungkin diskusi terbaik tentang apa itu ARel dan mengapa Nick Kallen menulis adalah artikel yang diberi nama tepat Mengapa Arel? oleh Nick Kallen sendiri. Catatan: artikel tersebut berisi beberapa jargon matematika dan ilmu komputer ringan, tetapi itulah intinya: ARel memiliki beberapa dasar yang kuat dalam matematika dan ilmu komputer, dasar-dasar itulah yang memberikan sifat-sifatnya yang kuat.
ARel, sayangnya terikat langsung untuk menghasilkan SQL dan dengan demikian tidak sesuai untuk kebutuhan DataMapper.
Cara saya mengatakannya adalah bahwa ARel adalah model kueri eksplisit untuk ActiveRecord yang menghasilkan dan mengoptimalkan kueri SQL untuk RDBMS.
DataMapper di sisi lain adalah pemeta asli untuk data, dan dapat berinteraksi dengan penyimpanan data non-relasional. Di masa mendatang DataMapper kemungkinan akan menyertakan pustaka terpisah yang disebut Veritas, yang dimaksudkan untuk menyediakan fungsionalitas relasional ke data yang bersumber dari penyimpanan data APA PUN, bukan hanya RDBMS.
sumber
Arel di Rails 3 membuat objek relasi di mana db tidak ditanyai sampai Anda membutuhkannya. Jauh lebih hemat.
Ini juga lebih alami (setelah Anda terbiasa) yang merupakan kekuatan besar Rails.
sumber
Sebenarnya saya telah memulai serial video di ActiveRelation.
Tutorial umum pertama dapat dilihat di http://Innovative-Studios.com/#pilot
sumber