-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Jb/638 cache descendants #53
base: master
Are you sure you want to change the base?
Conversation
def cached_descendants | ||
Rails.cache.fetch([self, 'descendants'], expires_in: 1.week) do | ||
descendant_pages(true) if self.respond_to?(:descendant_pages) | ||
descendant_groups(true) if self.respond_to?(:descendant_groups) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hier wäre es vermutlich schöner, wenn Du Structureable#descendants
überschreibst, sodass Du dann in dieser Methode nur noch descendants(true)
aufrufen musst.
def descendants(force_reload = false)
descendant_pages(true) if force_reload && self.respond_to?(:descendant_pages)
# ...
end
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ja, gute Idee. Leider wurde genau diese Methode in has_dag_links vergessen. Die Methode #descendants
ist übrigens tatsächlich lediglich ein Join auf die Methode #descendant_tablenames
von jeder Tabelle. Die einzelnen Methoden #descendant_tablenames
sind übrigens mit Parameter force_reload
versehen.
b4150a4
to
1be2070
Compare
3e70e6d
to
af086ae
Compare
4478ccc
to
39728aa
Compare
Das hier muss ich nochmal komplett neu angehen, sobald
acts_as_dag
undcached(:method)
fertig sind.Beim Löschen eines
DagLink
sollte auch der Cache vonancestor
unddescendant
gelöscht werden.Die Methode
#descendants
liefert erst nach einem#reload
das korrekte Ergebnis.Alle Verwendungsstellen von
#descendants
wurden durch#cached_descendants
ersetzt.Die Methode
#cached_descendants
ist besser, weil sie intern eindescendant_pages(true)
unddescendant_groups(true)
aufruft. Jede Klasse, dieis_structureable
ist, hat mindestensGroup
oderPage
alsancestor_class_name
.