find_by_contents will fail if you specify :include in the find_options 
parameter.  The problem is on line 313:

313: conditions = [ "id in (?)", id_array ]
314: # combine our conditions with those given by user, if any
315: if find_options[:conditions]
316:   cust_opts = find_options[:conditions].dup
317:   conditions.first << " and " << cust_opts.shift
318:   conditions.concat(cust_opts)
319: end
320: result = self.find(:all,
321:                    find_options.merge(:conditions => conditions))

Since the `id` field will be present in two separate tables, it will be 
ambiguous and throw an exception, e.g.

---
Question Load Including Associations (0.000000)   Mysql::Error: Column 
'id' in where clause is ambiguous: SELECT foos.`id` AS t0_r0, ... 
bars.`id` AS t1_r0, ... FROM foos LEFT OUTER JOIN bars ON bars.foo_id = 
foos.id WHERE (id in (1))

REBUILD YOUR INDEX! One of the id's didn't have an associated record: 1
---

Error should probably log a better message too...

Quick way to fix it:

313: conditions = [ "#{table_name}.#{connection.quote_column_name('id')} 
in (?)", id_array ]

I don't know if it's the perfect fix, but it works for me.

Cheers,
Aaron

-- 
Posted via http://www.ruby-forum.com/.
_______________________________________________
Ferret-talk mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ferret-talk

Reply via email to