Aaron Pfeifer
2006-Aug-17 20:07 UTC
[Ferret-talk] find_by_contents fails with :include option
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/.
Jens Kraemer
2006-Aug-17 20:52 UTC
[Ferret-talk] find_by_contents fails with :include option
On Thu, Aug 17, 2006 at 10:07:29PM +0200, Aaron Pfeifer wrote:> find_by_contents will fail if you specify :include in the find_options > parameter. The problem is on line 313:this problem has already been fixed in trunk. Jens -- webit! Gesellschaft f?r neue Medien mbH www.webit.de Dipl.-Wirtschaftsingenieur Jens Kr?mer kraemer at webit.de Schnorrstra?e 76 Tel +49 351 46766 0 D-01069 Dresden Fax +49 351 46766 66