Saya baru saja mulai magang. Majikan saya menggunakan ruby on rails, dan saya sering menemukan sintaks baru yang perlu saya cari untuk dipahami. Saya telah mencari-cari penjelasan yang baik tentang names_scope di Google, tetapi yang saya temukan sejauh ini kebanyakan posting blog yang memberikan pujian tinggi untuk itu, bukan definisi atau pengantar langsung.
Apa sebenarnya yang dimaksud dengan names_scope (sekarang disebut scope) di ruby on rails?
ruby-on-rails
named-scope
Ziggy
sumber
sumber
Jawaban:
Cakupan adalah bagian dari koleksi. Kedengarannya rumit? Tidak. Bayangkan ini:
Anda memiliki Pengguna. Sekarang, beberapa dari Pengguna tersebut berlangganan buletin Anda. Anda menandai mereka yang menerima buletin dengan menambahkan bidang ke Database Pengguna (user.subscribed_to_newsletter = true). Biasanya, terkadang Anda ingin mendapatkan Pengguna yang berlangganan buletin Anda.
Anda dapat, tentu saja, selalu melakukan ini:
Alih-alih selalu menulis ini, Anda dapat melakukan sesuatu seperti ini.
Jika Anda menggunakan Rails 4 atau yang lebih baru , lakukan ini sebagai gantinya:
Ini memungkinkan Anda untuk mengakses pelanggan Anda hanya dengan melakukan ini:
Ini adalah contoh yang sangat sederhana tetapi secara umum cakupan dapat menjadi alat yang sangat berguna untuk memudahkan pekerjaan Anda.
Lihat tautan ini: Deskripsi API
sumber
scope
sintaksnya jauh lebih bersih, Anda mendapatkan hasil yang sama tetapi hanya dengan satu barisruang lingkup dalam catatan aktif seperti metode kelas tetapi mereka mengembalikan objek Relasi yang berarti Anda dapat memanggil ruang lingkup atau metode kueri rekaman aktif di atasnya.
Misalnya, jika Anda memiliki model Zombie (tabel zombie) dengan metode lingkup yang disebutkan di bawah ini,
Dan Anda menelepon
Ini diterjemahkan ke bawah dalam SQL,
Contoh di atas didasarkan pada sintaks rails 4
sumber
scope :recent, -> { order(created_at: :desc) }
? apidock.com/rails/v4.2.9/ActiveRecord/QueryMethods/orderCara terbaik untuk memahami detailnya adalah dengan membuka Dokumentasi API.
Anda akan mendapatkan detail lengkap dan cara kami menggunakan Cakupan.
Dokumentasi Ruang Lingkup API
sumber
Mengapa menggunakannya?
Scoping memungkinkan Anda untuk menentukan kueri yang umum digunakan (dapat dianggap sebagai pintasan untuk kueri yang panjang atau paling sering digunakan) yang dapat dirujuk sebagai panggilan metode pada objek atau model asosiasi. Dengan cakupan ini, Anda dapat menggunakan setiap metode yang telah dibahas sebelumnya seperti di mana, bergabung, dan disertakan. Semua metode lingkup akan mengembalikan objek ActiveRecord :: Relation yang memungkinkan metode lebih lanjut (seperti cakupan lain) untuk dipanggil.
Untuk mendefinisikan ruang lingkup sederhana, kami menggunakan metode lingkup di dalam kelas, meneruskan kueri yang ingin kami jalankan ketika lingkup ini dipanggil:
Ini persis sama dengan mendefinisikan metode kelas, dan yang Anda gunakan adalah masalah preferensi pribadi:
Silakan ikuti tautan berikut untuk deskripsi lengkap dengan contoh. Saya harap ini akan membantu Anda.
http://guides.rubyonrails.org/active_record_querying.html
sumber
nil
dalam beberapa kasus, dan karenanya tidak dapat dirantai untuk kondisi tertentu.Sekarang bayangkan Anda:
Anda bisa mendapatkan kelas orang-orang tertentu itu dengan menggunakan sebuah scope!
Sekarang tidak terlalu sulit, bukan?
sumber