继承了一个项目,我发现这样的代码,在代码库中搜索一组记录:
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
哪个效果很好。但现在我需要添加记录数量的限制。我怎样才能在上面的工作范围内轻松完成这项工作?
答案 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)
这有用吗?