ActiveRecord下拉过滤器显示所有可能性,而不是实际过滤

时间:2014-01-09 23:13:34

标签: ruby-on-rails activerecord

我有一个索引页面,显示所有对象,无论类别和区域如何。在该页面的顶部是一个用于过滤对象的下拉菜单 - 一个用于分类,一个用于区域。

我过滤的项目是旅行。有一个Trip模型和行程控制器。我还有一个Region模型和Category模型,两者都是has_and_belongs_to_many :trips

在我的行程控制器中,我创建了一个行程查询并将其分配给实例变量@trips。如果某些条件适用,即。选择了下拉菜单并发送了params,然后我将表连接到加载所有这些表格的原始Trip查询。

看起来像这样:

def all
  @trips = Trip.where(active: true,site: 'desktop').order(:trip_number).page(params[:page])
  @trips = @road_trips.joins(:categories).where(categories: {id: params[:category][:id]}) if params[:category] && params[:category][:id] && !params[:category][:id].blank?
  @trips.joins(:regions).where(regions: {id: params[:region][:id]}) if params[:region] && params[:region][:id] && !params[:region][:id].blank?
end

我只能按类别和类别+区域成功过滤。但是,当我只选择一个区域时,它会显示所有行程。

我以为

!params[:category][:id].blank?

可以通过忽略中间查询并仅加入区域表来解决这个问题,但不是。

1 个答案:

答案 0 :(得分:0)

最后一行应为@trips = @trips.joins...