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.