Derzeit auf speichere ich, wenn ein aufgezeichnetes fällt in einen bestimmten ‚Umfang‘ zu überprüfen, mich versuche zu sehen. Dieser 'Bereich' ist wirklich nur ein paar gespeicherte Argumente für einen .where-Aufruf. Außerdem überprüfe ich mit diesem 'scope' immer nur die Werte des Objekts, nicht jedoch, wie es sich auf andere Objekte in der Datenbank bezieht, also wird die Abfrage der Datenbank immer überkillt, wenn das sinnvoll ist.überprüfen Sie, ob ein bestimmtes Active Record-Objekt in einem ‚Anwendungsbereich‘ Besonderes Ist
Ich habe nur in der Lage gewesen, mit der untenen Lösung mit diesem
begin
result = self.class.where(scope).find(self.id)
rescue
result = false
end
Die Frage zu kommen, ist, dass ich die Datenbank abzufragen habe, obwohl ich bereits den Rekord habe, und ich habe dies nicht laufen nur vor dem Speichern, aber nach dem Speichern, um die Werte und die Werte nach dem Speichern zu überprüfen, da es keine Möglichkeit gibt, die Datenbank nach der aktualisierten Version abzufragen, wenn sie nicht gespeichert wurde.
Es kann eine Reihe von diesen Prüfungen geben, so möchte ich es vermeiden, es zweimal zu tun, und auch die Datenbank mehrmals abfragen, auch wenn ich letztlich nur etwas nach ID suchen.
Die einzige andere Lösung, die ich habe, ein Verfahren zu haben, wäre denken konnte, dass einige, wie das übersetzt, wo in einem proc aufrufen, die einen boolean zurück, wenn ein Objekt übergeben. Das einzige Problem, das damit zu tun hat, ist, wie man mit dem aktiven Plattenadapter arbeiten muss, der wie ein ganzes Projekt aussieht. Kennt also jemand einen Weg, dies zu tun, oder eines Edelsteins, der helfen würde?
PS ich den ‚Umfang‘ aus dem Cache bekommen, damit ich es nicht als proc sparen, weil Sie nicht Procs in den Cache mit Rails setzen können.
Es kann hilfreich sein, ein konkretes Beispiel für die Aufzeichnung von den Verhältnissen aussehen Anwendungsbereich Sie speichern, zu liefern, und warum dies zu tun, Sie versuchen. Es könnte einen besseren Weg geben, um genau das zu erreichen, was Sie gerade tun. – deefour
Der Datensatz könnte alles sein und so könnte der Bereich, solange es keinen Vergleich zu irgendetwas anderem in der Datenbank erfordert, es sollte wiederverwendbar sein, egal, die Einrichtung. Es ist jedoch für ein Caching-System. Wenn der Datensatz vor oder nach dem Speichern in den Cache-Bereich fällt, wird der Cache gelöscht. Es ist für wirklich komplizierte Seiten, die Sie zwischenspeichern möchten, aber nicht ablaufen möchten, außer der aktualisierte Datensatz könnte Teil des Cache sein. – rovermicrover
gleiche Frage hier: http://stackoverflow.com/questions/1255815/check-if-model-instance-falls-withi-named-scope-in-rails – voondo