Ruby on Rails:返回nil

在我的应用程序中,我正在获取某个类别,并且我根据其名称过滤相关项目。 以下代码应该非常清楚:

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

但是,如果名称filter排除了所有项目,则返回的categories对象为nil。 这是预期的行为吗? 即使存在或不存在任何项目,我如何获得该类别?

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

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

根据你的代码, category_id似乎只引用了一个类别,所以我把它改成了单数。

您应该考虑对items表进行OUTER JOIN,无论表项是否符合名称filter,都会为您提供类别。