【问题标题】:ActiveRecord drop down filter displaying all possibilities, not actually filteringActiveRecord 下拉过滤器显示所有可能性,而不是实际过滤
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 2015-12-06
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多