Ruby on Rails:返回nil

时间:2013-04-07 01:23:45

标签: ruby-on-rails ruby model

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

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

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

2 个答案:

答案 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,无论表项是否符合名称过滤器,都会为您提供类别。