Lazy ActiveRecord di Rails Console

Secara default ActiveRecord di Rails bersifat lazy aka malas. Maksudnya adalah kita bisa melakukan chaining method untuk membentuk query tetapi query yang ada tidak langsung dijalankan sampai hasil benar-benar dibutuhkan.

Lain cerita jika kita mencoba mengeksekusi di Rails console. Alih-alih lazy, ActiveRecord akan langsung menghasilkan query meskipun niat kita adalah menyimpannya pada variabel untuk kemudian di-chain dengan method selanjutnya. Contohnya kode seperti ini yang berada di controller.

Kode ini akan menghasilkan query serupa berikut.

Tapi coba jalankan kedua baris tadi di Rails console. Yang ada adalah query pertama akan dijalankan terlebih dahulu.

Hal seperti ini bisa terjadi karena di console kode Ruby yang ada memang selalu dieksekusi secara seketika dan menghasilkan output berupa query yang bisa saja mengganggu kalau sebenarnya yang ingin kita lihat hanya query akhir yang dihasilkan.

Kita bisa mengakalinya dengan membuat kode menjadi satu baris dengan asumsi kode yang ditulis merupakan hasil kopas dari kode yang ada di controller kemudian membuatnya menjadi satu baris sehingga bentuknya seperti ini.

Saya pakai asumsi kopas karena jika tidak kopas lebih enak menggunakan ini

Bagaimana kalau kita tidak ingin membuatnya menjadi satu baris karena misal bisa saja ada banyak proses chaining?, bisa juga karena kita malas mengeditnya menjadi satu baris, apakah masih bisa menjaga sifat lazy-nya di console?

Bisa dong. Triknya sangat sederhana tetapi sepertinya banyak yang tidak sadar. Caranya adalah dengan menambahkan ; nil pada setiap akhir kode yang ingin tetap lazy.

NOTE :
Jika kamu teliti, di query yang dihasilkan terdapat klausa ORDER BY padahal di kode tidak ada pemanggilan method order. Itu karena saya menggunakan default scope di dalam kelas Payment::Transaction.

Semoga trik singkat ini membantu 🙂

Facebook Comments
 

Agung Setiawan

Agung Setiawan adalah software engineer di BukaLapak.com, penulis sekaligus pecinta sastra, dan pembaca buku

 
Halo, perkenalkan saya Agung Setiawan.
Saya Software Engineer di BukaLapak.
Simak pemikian saya soal dunia Software Engineering via Twitter di @agungsetiawanmu dan facebook
Blog ini saya update seminggu sekali jadi sering-sering saja mampir
Mau belajar Vim bareng saya?
Belajar ngoding dari nol menggunakan PHP

Leave a Reply

Your email address will not be published. Required fields are marked *