在rails中为菊花链查询添加限制

时间:2011-03-06 19:40:52

标签: ruby-on-rails activerecord limit

继承了一个项目,我发现这样的代码,在代码库中搜索一组记录:

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)

这很有效,但很脆弱,因为如果我不想包含任何条件,我需要一个新方法。所以,使用proc我现在有:

 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 :(得分:0)

尝试将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)

这有用吗?