过滤Rails中急切加载的结果

时间:2012-09-20 16:23:20

标签: ruby-on-rails eager-loading

我有一个Box,它有许多包含许多属于类别的项目的隔间。项目是多态的(:可迭代的),因为它们可以属于没有隔间的Box - 这可能是我的难度。

我可以在数据库中的所有Box中调用所有项目,在Box控制器中使用:

@category_items = Item.includes(:category).group("categories.name").sum("quantity * value")

但是如何将这些过滤到仅属于当前Box id的那些?

2 个答案:

答案 0 :(得分:0)

尝试

compartment_ids = %(SELECT id FROM compartments WHERE box_id = :box_id)

@category_items = Item.includes(:category).where("(itemable_type = 'box' AND itemable_id = :box_id) OR (itemable_type = 'compartment' AND itemable_id IN (#{compartment_ids}))", :box_id => box_id).group("categories.name").sum("quantity * value")

答案 1 :(得分:0)

尝试以下几点:

@category_items= Item.includes(:category).filter(params[:box], [:box_id,:compartment_id, "categories.name"])