eager loading : find_with_association

Kad Kerforn wrote:

in the script I am using, I checked the statement :

f = find_with_associations(options.merge(:sql => sanitized_sql))

That looks like my eager_custom_sql.rb mod.

where
sql = "SELECT..." my select, running fine in sql client mode or
find_by_sql()
and
options.inspect
=> "{:include=>[:user, :city, {:category=>:domain}]}"

this find_with_associations() just bring me back an empty record

f
=> [#<Proposal:0x3b5ae3c @attributes={"city_id"=>nil, "updated_at"=>nil,
"title"=>nil, "optel"=>nil, "id"=>nil, "show_count"=>nil,
"description"=>nil, "category_id"=>nil, "telephone"=>nil,
"user_id"=>nil, "valid_until"=>nil, "created_at"=>nil}>]

what's wrong with my nested include ???

Are you selecting your fields using the required tn_rn aliasing?

Kad Kerforn wrote:

the select is like this one :

SELECT *, (6366*acos(cos(0.853291)*cos(cities.latitude) * cos(cities.longitude - (0.040841))+sin(0.853291)*sin(cities.latitude))) as km FROM proposals INNER JOIN users ON proposals.user_id = users.id INNER JOIN cities ON proposals.city_id = villes.id INNER JOIN categories ON proposals.category_id = categories.id INNER JOIN domains ON categories.domain_id = domains.id WHERE proposals.city_id IN (31556,37294,31547,37302,31548,31555,31546,31557,37236,31540,31541) AND (6366*acos(cos(0.853291)*cos(cities.latitude) * cos(cities.longitude-(0.040841))+sin(0.853291)*sin(cities.latitude))) < 25.0 AND (valid_until >= '2007-01-21 09:25:15' OR valid_until IS NULL) ORDER BY km LIMIT 0,4

so, it's a select all, only a calculated value as km..

If you use the :include option you have to specially alias all your
selected fields in the way described in the comment at the top of
the mod, plus use left joins. And I'm not sure if it's possible to
also select some calculated fields.

Do you really need the returned proposal models to have the included
associated models chained off them, or do you just need to join the
other tables for use in the calculations and conditions?

Kad Kerforn wrote:

In this case I just need to join the other tables for use in the calculations and conditions,
the resulting list is the proposals list... from there ones can link_to the proposal.user only
(:cities , :category and :domain models are used only for conditions and calculations...)

Don't use the :include option then. Either use find_by_sql, or use a
normal find with specified :select, :joins, :conditions, and :order
options.