добавление ограничений к последовательному запросу в рельсах - PullRequest
0 голосов
/ 06 марта 2011

Унаследовав проект, я нахожу такой код для поиска набора записей в кодовой базе:

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

, который работает очень хорошо.Но теперь мне нужно добавить ограничение на количество записей.Как я могу сделать это легко в рамках того, что я делаю выше?

1 Ответ

0 голосов
/ 30 августа 2011

Попробуйте просто добавить limit в конец цепочки, например:

listings = 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).limit(30)

Это работает?

...