我有一个Box,它有许多包含许多属于类别的项目的隔间。项目是多态的(:可迭代的),因为它们可以属于没有隔间的Box - 这可能是我的难度。
我可以在数据库中的所有Box中调用所有项目,在Box控制器中使用:
@category_items = Item.includes(:category).group("categories.name").sum("quantity * value")
但是如何将这些过滤到仅属于当前Box id的那些?
答案 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"])