Array arguments for find :conditions

Foo is just a test model with a single attribute, name.

Foo.find(:all).map { |e| e.name }

=> ["a", "b", "c", "d", "e", "f", "g", "h", "i"]

If you simply add values.flatten! to replace_bind_variables in activerecord/lib/active_record/base.rb, line 1285 you can do all sorts of nice things like this:

def or_search_with_array(collection, field, *array)   conditions = array.to_a.flatten.map { |c|     " LOWER(#{field}) = ?"   }   collection.find(:all,     :conditions => [ conditions.join(" OR "), array.to_a ]) end

or_search_with_array(Foo, :name, ("a".."e").to_a).map { |e| e.name }

=> ["a", "b", "c", "d", "e"]

or_search_with_array(Foo, :name, "b", "c", "d").map { |e| e.name }

=> ["b", "c", "d"]

or_search_with_array(Foo, :name, [ "a", "b", "c" ]).map { |e| e.name }

=> ["a", "b", "c"]

or_search_with_array(Foo, :name, "c").map { |e| e.name }

=> ["c"]

My question is, are there any drawbacks to that, any reason why it isn't done?

Without it, none of the above works:

or_search_with_array(Foo, :name, [ "a", "b", "c" ]).map { |e| e.name }

ActiveRecord::PreparedStatementInvalid: wrong number of bind variables (1 for 3) in:   LOWER(name) = ? OR LOWER(name) = ? OR LOWER(name) = ?         from .../active_record/base.rb:1311:in `raise_if_bind_arity_mismatch'         from .../active_record/base.rb:1285:in `replace_bind_variables'         from .../active_record/base.rb:1276:in `sanitize_sql'         from .../active_record/base.rb:1062:in `add_conditions!'         from .../active_record/base.rb:1012:in `construct_finder_sql'         from .../active_record/base.rb:924:in `find_every'         from .../active_record/base.rb:381:in `find'         from (irb):5:in `or_search_with_array'         from (irb):9