MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Jadikan sesi mongoid hanya baca

Itu pertanyaan lama, tetapi saya menemui masalah yang sama baru-baru ini, jadi memutuskan untuk berbagi. Meskipun, saya ingin memperhatikan, bahwa ini bukan solusi per sesi, tetapi solusi per model.

Seperti yang saya ketahui, ada dua cara untuk mewujudkannya:

1. Definisikan ulang readonly?

Jika Anda melihat melalui kode Mongoid, Anda akan melihat bahwa semua fungsi yang menyimpan, menghapus, atau memperbarui, memanggil readonly? untuk memeriksa apakah model hanya-baca. Tidak benar-benar didokumentasikan dan memiliki kekurangan -- buat dan buat! diperbolehkan pada model ini (menghancurkan, memperbarui, menyimpan tidak akan berjalan).

private

def readonly?
  true
end

2. Panggilan balik khusus

Selain metode sebelumnya, Anda dapat menambahkan panggilan balik untuk memastikan bahwa pembuatan genap tidak akan melewati:

before_create :readonly_secret

private

def readonly?
  true
end

def readonly_secret
  raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
end

Pada dasarnya, Anda dapat menyingkirkan readonly? metode semuanya, dan tambahkan panggilan balik lain seperti before_save , before_destroy , before_update , before_create

Manipulasi "keterbacaan"

jika Anda merasa perlu untuk memanipulasi status read-only dari kode runtime, Anda dapat menentukan atribut untuk kelas model Anda:

before_create :readonly_secret

class << self
  attr_accessor :readonly
end

private

def readonly?
  self.class.readonly.nil? ? true : self.class.readonly
end

def readonly_secret
  raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
  true
end



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. kecualikan bidang dalam agregasi $lookup

  2. Eksekusi JavaScript gagal terhubung ke shell mongoHQ

  3. Urutan terbalik item yang ditarik dari database di ng-repeat

  4. Simpan gambar di MongoDB

  5. Bagaimana cara memulai kembali rantai janji secara kondisional dari awal?