それは古い質問ですが、最近同じ問題に遭遇したので、共有することにしました。ただし、これはセッションごとのソリューションではなく、モデルごとのソリューションであることに注意してください。
私が理解したように、それを可能にする2つの方法があります:
1。 readonly?
を再定義します
Mongoidコードを見ると、保存、削除、または更新するすべての関数がreadonly?
を呼び出していることがわかります。 モデルが読み取り専用かどうかを確認します。実際には文書化されておらず、欠点があります-作成して作成してください!このモデルでは許可されています(ただし、破棄、更新、保存は実行されません)。
private
def readonly?
true
end
2。カスタムコールバック
前のメソッドに加えて、コールバックを追加して、作成したものでもパススルーしないようにすることができます:
before_create :readonly_secret
private
def readonly?
true
end
def readonly_secret
raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
end
基本的に、readonly?
を取り除くことができます メソッドをまとめて、before_save
などの他のコールバックを追加します 、before_destroy
、before_update
、before_create
「読みやすさ」を操作する
ランタイムコードから読み取り専用状態を操作する必要があると感じた場合は、モデルのクラスの属性を定義できます。
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