2014-01-09 43 views
0

我有一个索引页面,显示所有对象,无论类别和地区。在该页面的顶部是一个用于过滤对象的下拉菜单 - 一个用于分类,一个用于区域。ActiveRecord下拉过滤器显示所有可能性,而不是实际过滤

我正在过滤的项目是旅行。有一个Trip模型和行程控制器。我也有一个区域模型和类别模型,两者都是has_and_belongs_to_many :trips

在我的行程控制器中,我创建了行程查询并将其分配给实例变量@trips。如果某些条件适用,即。已选择下拉菜单并发送参数,然后我将表加入到加载所有这些参数的原始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

@road_trips在哪里定义?只看这个很难说,因为虽然很麻烦,但它看起来应该起作用。您需要查看日志中的参数以及正在执行的查询,以便弄清楚这一点。 – steakchaser

回答

0

应该是@trips = @trips.joins...最后一行