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>>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk
-~----------~----~----~----~------~----~------~--~---