活动记录下拉过滤器显示所有可能性,而不是实际过滤



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

我正在过滤的项目是旅行。有一个跳闸模型和跳闸控制器。我还有一个区域模型和类别模型,两者都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?

将通过忽略中间查询并仅连接区域表来解决此问题,但事实并非如此。

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

最新更新