Унаследовав проект, я нахожу такой код для поиска набора записей в кодовой базе:
Listing.category_id_equals(category_id).city_id_equals(city.id).end_date_greater_than(Time.now.utc).start_date_less_than(Time.now.utc).validated_equals(true)
Это работает, но хрупко, потому что если я не хочу включать вусловия, мне нужен новый метод.Итак, с помощью процедур у меня теперь есть:
def self.for_cat_and_city cat=nil, city=nil
base = proc { |o| o.end_date_greater_than(Time.now.utc).start_date_less_than(Time.now.utc).validated_equals(true)}
city_query = proc { |o, city| o.city_id_equals(city.id)}
cat_query = proc { |o, cat| o.category_id_equals(cat.id)}
limit = proc { |o, limit| o.limit(limit)}
unless cat.nil?
return city_query.call(cat_query.call(base.call(Listing),cat), city) unless city.nil?
return cat_query.call(base.call(Listing), cat)
end
return city_query.call(base.call(Listing), city) unless city.nil?
return base.call(Listing)
end
, который работает очень хорошо.Но теперь мне нужно добавить ограничение на количество записей.Как я могу сделать это легко в рамках того, что я делаю выше?