【发布时间】:2014-01-28 18:27:16
【问题描述】:
我有一个索引页面,它显示所有对象,无论类别和区域如何。该页面的顶部是一个用于过滤对象的下拉菜单 - 一个用于类别的下拉菜单,一个用于区域的下拉菜单。
我过滤的项目是旅行。有一个行程模型和行程控制器。我还有一个 Region 模型和 Category 模型,两者都是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?
将通过忽略中间查询并仅加入区域表来解决此问题,但事实并非如此。
【问题讨论】:
-
@road_trips 在哪里定义?仅仅看这个很难说,因为虽然它很乱,但它看起来应该可以工作。您需要查看日志中的参数和正在执行的查询才能弄清楚这一点。
标签: ruby-on-rails activerecord