Если вы действительно хотели сделать это в Ruby, вы могли бы сделать:
def bookings_of(filters)
self.bookings.select do |booking|
!!filters.map { |key, value| break if booking.send(key) != value }
end
end
Использование break здесь приведет к сбою, как только один из фильтров не пройдет, и он использует тот факт, что nil ложно, в то время как массив верен.
Но вам, вероятно, следует просто использовать .where
и вместо этого делать это в базе данных.
В этом случае вы можете сделать это за один вызов, объединив массив хэшей в один га sh:
bookings.where(filters.reduce({}, :merge))