add column to find

I have a find with a has_many relationship using :include for the relationship. My question is how do i add an additional column to the query and keep all the associations in tact? I need to add a distance column in the output for some geocoding but can not figure out how to do this without being forced to find_by_sql.

Any ideas would be greatly appreciated.

Thanks Adam

I'll assume that the "column" in question isn't in any table but being computed on the fly. If so, simply modify the ':select =>' parameter to add your additional column. I.e.

Model.find(:all, :select => '*, insert_ugly_trig_formula_here AS distance', :conditions => etc. etc.)

Notice the '*,' so that you still get the other columns you (and ActiveRecord) normally expect. Once the query returns you'll have an @object.distance method you can call that gives you the computed distance for that record.

straightflush@gmail.com wrote:

Thanks Jon.

Does this work as well with eager loading ? Thats why I included that i was using :include as well in my find. Just want to make sure that is not going to throw this in a hissy, because i have been trying :select with eager loading and not having any luck.

Thanks Adam

Actually, no. Eager loading with :include => overwrites anything you put in the :select => parameter, so you can’t do both. Sorry, I didn’t pick up on the importance of the eager loading in your original question.

wrote:

Thats what I thought. Any suggestions on a workaround? The only other thing I was thinking was somehow using a postgresql function or view to make an additional column available at the postgres level.

Thanks again for the help.

Adam

The one time I’ve tried to do this, I didn’t actually need to eager load, I just needed to include other tables in the SELECT function and the WHERE conditions, so I used :joins => instead of :include => and that worked well for me. That may not work for you though. Your other options are, A) not eager load, or B) compute ‘distance’ for each item later on in a separate method.

wrote:

Jon,

So does that mean i can use :select with :joins , but not :include ?

The function idea is a good recommendation, but I unfortunately need to sort the sql query by distance .

Thanks Adam

Yes, :select and :joins play very nice together.

straightflush@gmail.com wrote: