You've got a very interesting solution. My only issue with it is the syntax (i.e. :include => :valiases). For a patch to be included to core, we need to adapt it so that it fits in with the current :include, :joins etc system. However i might just use your plugin if nobody is interested in pushing something like this to core
Additionally we should also consider a solution that is going to allow conditions to work with named_scopes, i.e. adding more and more conditions to the relationship tables. I'll try and come up with some more ideas after i've had time to understand your codes :) On Mar 16, 10:56 pm, bduc <[email protected]> wrote: > I had the same problem (and opinion), I wrote a plugin last year to > solve this issue, and called it virtual aliases. > > I solved two issues with it: > > 1. make :select work even when eager loading (:include ); you can thus > limit the fields that are requested in the query ; objects are created > but fields not requested are not present in the object. > 2. be able to specify conditions/order/group in a way that you can > access relations on ActiveRecord. > > To extend your example (added country, and creator) > > class Person < ActiveRecord::Base > # Everybody has a home address > belongs_to :home_address,:class_name => 'Address', :foreign_key => > 'home_address_id' > > # Everybody has a work address > belongs_to :work_address, :class_name => 'Address', :foreign_key > => 'work_address_id' > > # Only some people have a second work address > belongs_to :work_address_2, :class_name => 'Address', :foreign_key > => 'work_address_2_id' > belongs_to :creator, : class_name => 'User' > end > > class Address < ActiveRecord::Base > belongs_to :creator, : class_name => 'User' > belongs_to :country > # street_no (string) > # street_name (string) > end > > class Country > belongs_to :creator, : class_name => 'User' > # name > end > > These will all work and do the necessary joins automatically : > > Person.find(:all, :include => :valiases, :conditions => > "{work_address.country.name} = 'Belgium' ", :order => > "{home_address.street_name}" ) > Person.find(:all, :include => :valiases, :conditions => > "{work_address.creator.name} = 'bduc ", :order => > "{home_address.country.creator.name}" ) > > All valiases are placed between curly braces and replaced by the > correct real aliases activerecord makes up for then. > > Currently used and tested on rails 2.2 > > The code is at dev.dyndaco.com ; but you cannot checkout the code yet; > only view it (will make checkout available later this month). > There currently is not much documentation and there are no tests > included; that's way I don't make to much fuss about it. > Apart from that , it works great ! > > If you're intrested let me know. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
