MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Đặt phiên mongoid chỉ đọc

Đó là một câu hỏi cũ, nhưng tôi gặp vấn đề tương tự gần đây, vì vậy quyết định chia sẻ. Mặc dù, tôi muốn lưu ý rằng đây không phải là giải pháp cho mỗi chuyến tàu, mà là một giải pháp cho mỗi mô hình.

Như tôi đã tìm ra, có hai cách để làm cho điều đó trở nên khả thi:

1. Xác định lại readonly?

Nếu bạn xem qua mã Mongoid, bạn sẽ thấy rằng tất cả các chức năng lưu, xóa hoặc cập nhật, gọi readonly? để kiểm tra xem mô hình có ở chế độ chỉ đọc hay không. Không thực sự được ghi lại và có một nhược điểm - tạo và tạo! được phép trên mô hình này (hủy, cập nhật, lưu sẽ không chạy).

private

def readonly?
  true
end

2. Gọi lại tùy chỉnh

Ngoài phương pháp trước đó, bạn có thể thêm (các) lệnh gọi lại để đảm bảo rằng ngay cả các lần tạo sẽ không chuyển qua:

before_create :readonly_secret

private

def readonly?
  true
end

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

Về cơ bản, bạn có thể loại bỏ readonly? tất cả phương thức và thêm các lệnh gọi lại khác như before_save , before_destroy , before_update , before_create

Thao tác "độ sẵn sàng"

nếu bạn cảm thấy cần phải thao tác trạng thái chỉ đọc từ mã thời gian chạy, bạn có thể xác định một thuộc tính cho lớp của mô hình của mình:

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. Đẩy các giá trị vào mảng cơ sở dữ liệu mongodb thông qua (sails js) waterline

  2. IP danh sách trắng mongoDB

  3. Khởi động PHP:Không thể tải thư viện động 'php_mongodb.dll'

  4. trình điều khiển php mongodb, không bao giờ được tải

  5. Làm cách nào để chỉ lấy các bài báo có nhận xét đã được tạo cách đây 20 phút?