私は Rails 3.2 アプリケーションを構築していますが、関係を維持し、挿入と削除を処理するためだけに、Sidekiq ジョブを別のモデルにカプセル化する必要があります。
私は Mongoid をプライマリ ORM として使用していますが、不変のレコードを作成する方法を知りたいです。
これは、(初期化および) ジョブの作成後、変更は受け入れられず、レコードを削除することを意味します。
ありがとう!
私は Rails 3.2 アプリケーションを構築していますが、関係を維持し、挿入と削除を処理するためだけに、Sidekiq ジョブを別のモデルにカプセル化する必要があります。
私は Mongoid をプライマリ ORM として使用していますが、不変のレコードを作成する方法を知りたいです。
これは、(初期化および) ジョブの作成後、変更は受け入れられず、レコードを削除することを意味します。
ありがとう!
Rails アプリが唯一の MongoDB クライアントであると仮定すると、モデル層で不変性ロジックを実装できます。
class Job
include Mongoid::Document
before_validation { false if changed? && persisted? }
end
save
またはcreate
を初めて呼び出すとJob
、データは正常に保持されます。を呼び出すと、オブジェクトに対するそれ以上の変更はデータベースに書き込まれませんsave
。の動作はdelete
影響を受けません。
なぜこれが機能するのか
before_validation
false が返された場合、永続性をキャンセルします。
before_validation コールバックの戻り値が false と評価される場合、プロセスは中止され、Base#save は false を返します。もし ActiveRecord::Validations#save! 呼び出されると、ActiveRecord::RecordInvalid 例外が発生します。エラー オブジェクトには何も追加されません。
メソッドリファレンス