Dynamically constructing conditions in multiple self join


I am using a join that looks like this:

Person.find :all,
  :select => 'children_people_3.*',
  :joins => { :children => { :children => :children } },
  :conditions => {
    :people => { :name => 'tom' },
    :children_people => { :name => 'dick' },
    :children_people_2 => { :name => 'harry' },
    :children_people_3 => { :name => 'charles' }

which I don not like because I am hard-coding assumptions about the
table aliases used for the joins into the conditions.

Can someone tell me how to write the conditions in a more flexible way
(can they be specified using the hash syntax?), or possibly tell me how
I could try use the Arel being used to construct the query by the Rails
core to construct the table aliases that I am hard-coding above.

Rails 3.0.0.beta.