現在保存中に、記録が特定の「スコープ」に該当するかどうかを確認しようとしています。この「スコープ」は、実際には .where 呼び出しの保存された引数にすぎません。また、この「スコープ」を使用すると、オブジェクトの値をチェックするだけで、データベース内の他のオブジェクトとの関係をチェックすることはありません。
私は以下の解決策しか思いつかなかった
begin
result = self.class.where(scope).find(self.id)
rescue
result = false
end
これに関する問題は、既にレコードがあるにもかかわらず、データベースにクエリを実行する必要があることです。保存前だけでなく、保存後にこれを実行して、以前の値と保存後の値を確認する必要があります。保存されていない場合、更新されたバージョンをデータベースに照会する方法はありません。
これらのチェックは多数ある可能性があるため、最終的にIDで何かを検索するだけであっても、2回実行したり、データベースに何度もクエリを実行したりすることは避けたいと思います.
私が考えることができた他の唯一の解決策は、オブジェクトが渡されたときにブール値を返すprocにwhere呼び出しを何らかの方法で変換するメソッドを持つことです。それに関する唯一の問題は、使用されているアクティブなレコード アダプターとどのように連携する必要があるかということです。これは、プロジェクト全体のように見えます。それで、これを行う方法、または役立つgemを知っている人はいますか?
PSキャッシュから「スコープ」を取得しているため、Railsを使用してprocをキャッシュに入れることができないため、procとして保存できません。