Wes Gamble
2013-Apr-08 21:57 UTC
Proposed new ActiveRecord feature: Built-in "orphaned" scope for AR objects
For purposes of maintenance and data cleanup, sometimes it is helpful to determine if you have orphaned records in your AR backing store. Assuming that an AR::Base descendant has one or more belongs_to associations, I propose the addition of built-in "<association_name>_orphaned" scopes that would return the set of records where the belongs_to association record doesn''t exist. Using association introspection, this would be fairly straightforward. However, I''m not certain about the idea of having a "built-in" scope, as I''m not sure if any even exist at this point. Is this better implemented in a standalone gem that would then add these scopes? Many thanks, Wes -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscribe@googlegroups.com. To post to this group, send email to rubyonrails-core@googlegroups.com. Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Ben Woosley
2013-Apr-08 22:45 UTC
Re: Proposed new ActiveRecord feature: Built-in "orphaned" scope for AR objects
Hey Wes, If you use foreign key constraints, then all orphaned records would have the foreign key set to null. If not, you''d have to do an outer join to determine what is orphaned. Given this divergence, IMO this is best left to the author. -Ben On Mon, Apr 8, 2013 at 2:57 PM, Wes Gamble <weyus@att.net> wrote:> For purposes of maintenance and data cleanup, sometimes it is helpful to > determine if you have orphaned records in your AR backing store. > > Assuming that an AR::Base descendant has one or more belongs_to > associations, I propose the addition of built-in > "<association_name>_orphaned" scopes that would return the set of records > where the belongs_to association record doesn''t exist. Using association > introspection, this would be fairly straightforward. > > However, I''m not certain about the idea of having a "built-in" scope, as > I''m not sure if any even exist at this point. Is this better implemented in > a standalone gem that would then add these scopes? > > Many thanks, > Wes > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to rubyonrails-core+unsubscribe@googlegroups.com. > To post to this group, send email to rubyonrails-core@googlegroups.com. > Visit this group at http://groups.google.com/group/rubyonrails-core?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 "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscribe@googlegroups.com. To post to this group, send email to rubyonrails-core@googlegroups.com. Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Wes Gamble
2013-Apr-08 23:10 UTC
Re: Proposed new ActiveRecord feature: Built-in "orphaned" scope for AR objects
Ben, Depending on how things are set up, you may or may not have NULL values in the foreign key column. In either case, this query: Given: X: an AR::Base descendent class association_class: the belongs_to association class (discovered via association reflection) foreign_key: the foreign key to the belongs_to association class (discover via association reflection) X.where("{foreign_key} NOT IN (SELECT {association_class.primary_key} FROM {association_class.table_name})") will give you all orphaned records for X with respect to association_class. W On Monday, April 8, 2013 5:45:16 PM UTC-5, Ben Woosley wrote:> > Hey Wes, > > If you use foreign key constraints, then all orphaned records would have > the foreign key set to null. If not, you''d have to do an outer join to > determine what is orphaned. Given this divergence, IMO this is best left to > the author. > > -Ben > > > On Mon, Apr 8, 2013 at 2:57 PM, Wes Gamble <we...@att.net <javascript:>>wrote: > >> For purposes of maintenance and data cleanup, sometimes it is helpful to >> determine if you have orphaned records in your AR backing store. >> >> Assuming that an AR::Base descendant has one or more belongs_to >> associations, I propose the addition of built-in >> "<association_name>_orphaned" scopes that would return the set of records >> where the belongs_to association record doesn''t exist. Using association >> introspection, this would be fairly straightforward. >> >> However, I''m not certain about the idea of having a "built-in" scope, as >> I''m not sure if any even exist at this point. Is this better implemented in >> a standalone gem that would then add these scopes? >> >> Many thanks, >> Wes >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Ruby on Rails: Core" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to rubyonrails-co...@googlegroups.com <javascript:>. >> To post to this group, send email to rubyonra...@googlegroups.com<javascript:> >> . >> Visit this group at http://groups.google.com/group/rubyonrails-core?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 "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscribe@googlegroups.com. To post to this group, send email to rubyonrails-core@googlegroups.com. Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en. For more options, visit https://groups.google.com/groups/opt_out.