Re: [DataMapper] Override Accessor To Hide Caching
Just discovered an issue with the way I am trying to apply criteria. So to take your snippet from before, how would I implement something like subjects(:name=>"DM")? I tried this: def subjects(criteria_hash = {}) Rails.cache.fetch("my-key") { super(criteria_hash) } end But I get a stack overflow in IRB. I'm sure this is something simple, but I could use a pointer. Thanks. On Friday, February 8, 2013 9:15:28 PM UTC-5, Neil C wrote: > > Thanks for the tip! > > > On Friday, February 8, 2013 5:02:00 PM UTC-5, Chris Corbyn wrote: >> >> We override accessors and we just invoke super to get the original data. >> So really this should work: >> >> has n, :subjects >> >> def subjects >> Rails.cache.fetch(id) { super } >> end >> >> Cheers, >> >> Chris >> >> >> Il giorno 09/feb/2013, alle ore 04:36, Neil C ha >> scritto: >> >> I am generating a web page that will ultimately display a lot of >> content--perhaps something like 50 categories each with 20 subjects each >> with 10 photos. I am devising a caching strategy both at the database layer >> and the UI layer, but I had a question about the former I want to pose to >> the experts here. >> >> So the association would look something *display.categories.subjects.photos. >> *It seems to me just eyeballing that *display.categories.subjects* will >> be an expensive call I would like to cache. >> >> Imagine the following category model: >> >> class Category >> include DataMapper::Resource >> >> property :id, Serial >> ... >> has n, :subjects >> >> def subjects >> Rails.cache.fetch(self.id) { attribute_get(:subjects) #or something >> } >> end >> end >> >> Basically I want to override *subjects* so that I grab the cache of it >> if available. Otherwise, execute *subjects* as it >> would normally without the override to return the association from a >> database query. >> >> However, no matter what I try-- attribute_get, super, various >> combinations of each--I can't manage to solve this. I really don't want to >> have a second method to expose the cached association and betray those >> implementation details to my client code. >> >> Any ideas on this are appreciated. >> >> Thanks. >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "DataMapper" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to datamapper+...@googlegroups.com. >> To post to this group, send email to datam...@googlegroups.com. >> Visit this group at http://groups.google.com/group/datamapper?hl=en. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> >> >> -- You received this message because you are subscribed to the Google Groups "DataMapper" group. To unsubscribe from this group and stop receiving emails from it, send an email to datamapper+unsubscr...@googlegroups.com. To post to this group, send email to datamapper@googlegroups.com. Visit this group at http://groups.google.com/group/datamapper?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Re: [DataMapper] Override Accessor To Hide Caching
Thanks for the tip! On Friday, February 8, 2013 5:02:00 PM UTC-5, Chris Corbyn wrote: > > We override accessors and we just invoke super to get the original data. > So really this should work: > > has n, :subjects > > def subjects > Rails.cache.fetch(id) { super } > end > > Cheers, > > Chris > > > Il giorno 09/feb/2013, alle ore 04:36, Neil C > > > ha scritto: > > I am generating a web page that will ultimately display a lot of > content--perhaps something like 50 categories each with 20 subjects each > with 10 photos. I am devising a caching strategy both at the database layer > and the UI layer, but I had a question about the former I want to pose to > the experts here. > > So the association would look something *display.categories.subjects.photos. > *It seems to me just eyeballing that *display.categories.subjects* will > be an expensive call I would like to cache. > > Imagine the following category model: > > class Category > include DataMapper::Resource > > property :id, Serial > ... > has n, :subjects > > def subjects > Rails.cache.fetch(self.id) { attribute_get(:subjects) #or something } > end > end > > Basically I want to override *subjects* so that I grab the cache of it if > available. Otherwise, execute *subjects* as it > would normally without the override to return the association from a > database query. > > However, no matter what I try-- attribute_get, super, various combinations > of each--I can't manage to solve this. I really don't want to have a second > method to expose the cached association and betray those implementation > details to my client code. > > Any ideas on this are appreciated. > > Thanks. > > > -- > You received this message because you are subscribed to the Google Groups > "DataMapper" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to datamapper+...@googlegroups.com . > To post to this group, send email to datam...@googlegroups.com > . > Visit this group at http://groups.google.com/group/datamapper?hl=en. > For more options, visit https://groups.google.com/groups/opt_out. > > > > > -- You received this message because you are subscribed to the Google Groups "DataMapper" group. To unsubscribe from this group and stop receiving emails from it, send an email to datamapper+unsubscr...@googlegroups.com. To post to this group, send email to datamapper@googlegroups.com. Visit this group at http://groups.google.com/group/datamapper?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Re: [DataMapper] Override Accessor To Hide Caching
We override accessors and we just invoke super to get the original data. So really this should work: has n, :subjects def subjects Rails.cache.fetch(id) { super } end Cheers, Chris Il giorno 09/feb/2013, alle ore 04:36, Neil C ha scritto: > I am generating a web page that will ultimately display a lot of > content--perhaps something like 50 categories each with 20 subjects each with > 10 photos. I am devising a caching strategy both at the database layer and > the UI layer, but I had a question about the former I want to pose to the > experts here. > > So the association would look something display.categories.subjects.photos. > It seems to me just eyeballing that display.categories.subjects will be an > expensive call I would like to cache. > > Imagine the following category model: > > class Category > include DataMapper::Resource > > property :id, Serial > ... > has n, :subjects > > def subjects > Rails.cache.fetch(self.id) { attribute_get(:subjects) #or something } > end > end > > Basically I want to override subjects so that I grab the cache of it if > available. Otherwise, execute subjects as it would normally without the > override to return the association from a database query. > > However, no matter what I try-- attribute_get, super, various combinations of > each--I can't manage to solve this. I really don't want to have a second > method to expose the cached association and betray those implementation > details to my client code. > > Any ideas on this are appreciated. > > Thanks. > > > -- > You received this message because you are subscribed to the Google Groups > "DataMapper" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to datamapper+unsubscr...@googlegroups.com. > To post to this group, send email to datamapper@googlegroups.com. > Visit this group at http://groups.google.com/group/datamapper?hl=en. > For more options, visit https://groups.google.com/groups/opt_out. > > -- You received this message because you are subscribed to the Google Groups "DataMapper" group. To unsubscribe from this group and stop receiving emails from it, send an email to datamapper+unsubscr...@googlegroups.com. To post to this group, send email to datamapper@googlegroups.com. Visit this group at http://groups.google.com/group/datamapper?hl=en. For more options, visit https://groups.google.com/groups/opt_out.