2014-01-09 76 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...最後一行