1

在我的应用程序中,我正在获取某个类别,并根据它们的名称过滤关联的项目。下面的代码应该很清楚:

categories = Category.where(:id => params[:category_id]).includes(:items).where("lower(items.name) like ?", "%#{params[:keywords].downcase}%")

但是,如果名称过滤器排除了所有项目,则categorieswhere 返回的对象为 nil。这是预期的行为吗?即使项目存在与否,我如何获得类别?

4

2 回答 2

1

最简单的方法可能是拆分查询:

@category = Category.find(params[:category_id])
@items = @category.items.where("lower(items.name) like ?", "%#{params[:keywords].downcase}%")

根据您的代码,它似乎category_id只引用了 1 个类别,因此我将其更改为单数。

于 2013-04-07T01:32:04.087 回答
0

您应该考虑对 items 表执行 OUTER JOIN,这将为您提供类别,无论它们的项目是否符合名称过滤器。

于 2013-04-08T06:01:31.347 回答