在我的应用程序中,我正在获取某个类别,并且我根据其名称过滤相关项目。 以下代码应该非常清楚:
categories = Category.where(:id => params[:category_id]).includes(:items).where("lower(items.name) like ?", "%#{params[:keywords].downcase}%")
但是,如果名称过滤器排除了所有项目,则返回的categories
对象的位置为nil。这是预期的行为吗?即使存在或不存在任何项目,我如何获得该类别?
答案 0 :(得分:1)
最简单的方法可能是分割查询:
@category = Category.find(params[:category_id])
@items = @category.items.where("lower(items.name) like ?", "%#{params[:keywords].downcase}%")
根据您的代码,似乎category_id
只引用了一个类别,因此我将其更改为单数。
答案 1 :(得分:0)
您应该考虑对items表进行OUTER JOIN,无论表项是否符合名称过滤器,都会为您提供类别。