find方法非常便于检索记录,我经常使用:include来预取引用的记录以避免昂贵的数据库访问。
我有一个案例,我检查销售人员的所有销售。
@sales = Sales.find(:all,
:include => [:salesperson, :customer, :batch, :product],
:conditions => {:salesperson_id => someone},
:order => :customer_id)
然后我想根据返回的内容对返回的记录进行切片和切块。例如,我想为特定商店的销售人员所做的所有销售生成一份报告,我们知道这是以前返回的数据的一部分。
我想做的是,
@storeSales = @sales.find_by_store(store_id)
...并从内存中保存的数组中检索此子集作为新数组,而不是通过再次对数据库执行查找来实现相同的功能。毕竟,@ sales只是一个Sales对象的数组,因此支持这一点并不合理。
然而,似乎没有一种方便的方法可以做到这一点,是吗?感谢。
答案 0 :(得分:4)
如果您使用的是Rails 3,则@sales将成为AREL标准对象。你能做的是:
@sales = Sales.find(:all,
:include => [:salesperson, :customer, :batch, :product],
:conditions => {:salesperson_id => someone},
:order => :customer_id)**.all**
现在@sales是一个Sales of Model模型对象的实例。现在可以使用select方法轻松获取数组对象的子集:
@my_product_sales = @sales.select { |s| s.product == my_product_criteria }
使用select method后,您现在将@sales作为完整的结果集,并根据收集条件将@my_product_sales作为子集。