hash_to_conditions
:conditions = { :foo => bar }
.
hash_to_conditions
is was useful to programmatically generate the :conditions
parameter for ActiveRecord::Base#find
.
def hash_to_conditions(hash)
if hash.empty?
return nil
else
keys, values = hash.to_a.transpose
sql = keys.map { |x| "#{x} = ?" }.join(" AND ")
return [ sql, *values ]
end
end
hash_to_conditions(:foo => 1, :bar => 2)
# => [ "foo = ? AND bar = ?", 1, 2 ]
hash.to_a.transpose
?Even though Hash#keys
and Hash#values
always seem to return data in matching order (in Matz’ Ruby implementation) it doesn’t seem to be guaranteed to behave that way. Thanks to LoganCapaldo at #ruby-lang
for the hash.to_a.transpose
solution.