2017-03-06 41 views
0

我試圖根據類別和子類別進行過濾。現在我正在做這個,沒有任何Ajax。Url正在採取正確的參數,但沒有在rails應用上顯示正確的結果

以下是我的控制器方法

def filter 
    x = params[:category_id] 
    y = params[:sub_category_id] 
    #@wanted_equipments = WantedEquipment.Approved.where(category_id: "#{x}", sub_category_id: "#{y}") 

    if x 
     @wanted_equipments = WantedEquipment.Approved.where(category_id: "#{x}") 
    elsif x && y 
     @wanted_equipments = WantedEquipment.Approved.where(category_id: "#{x}", sub_category_id: "#{y}") 
    end 
end 

當我根據類別第一過濾,網址如下:

http://localhost:3000/wanted_equipments/filter?utf8=%E2%9C%93&category_id=1 

而該類別下的顯示設備。 接下來,當我選擇子類別並輸入過濾器。 url看起來像這樣:

http://localhost:3000/wanted_equipments/filter?utf8=%E2%9C%93&category_id=1&sub_category_id=3 

它應該根據sub_category_id進一步過濾。但它正在顯示與之前相同的數據,即即使url採用sub_category_id,它也只考慮category_id作爲參數。

我知道我做錯了什麼。我嘗試了不同的條件,但無法解決這個問題。有人請告訴我,我應該如何改變控制器,以便它也考慮子類別?

+0

什麼是在這裏批准?我認爲它的範圍和名稱應該被批准 –

+0

哦,這是來自管理員的一項功能。它只顯示批准的設備, – user3576036

+0

你應該使用小寫的功能名稱,除此之外,下面的答案是好的 –

回答

2

問題與你的條件。嘗試更改爲:

if x && y 
    @wanted_equipments = WantedEquipment.Approved.where(category_id: "#{x}", sub_category_id: "#{y}") 
elsif x 
    @wanted_equipments = WantedEquipment.Approved.where(category_id: "#{x}") 
end 

因爲您的if x條件爲true,所以它不會移至eslif塊。希望這有效。

+0

這是行得通的。但是,如果我不選擇任何sub_category_id,我怎麼才能使它只抓取category_id?例如這個URL:'http:// localhost:3000/wanted_equipments/filter?utf8 =%E2%9C%93&category_id = 1&sub_category_id ='應該在category_id下顯示數據。 – user3576036

+1

用禮物檢查你的狀況?也喜歡'如果x.present? && y.present?',並在elsif' elsif x.present?'它會爲你工作。 –

1

有序列

的問題,在你的代碼的條件首先檢查xpresent?與否,如果x是存在,那麼它會不會

所以檢查第二個條件,改變你的代碼序列如下

if x && y 
    @wanted_equipments = WantedEquipment.Approved.where(category_id: "# {x}", sub_category_id: "#{y}") 
elsif x 
    @wanted_equipments = WantedEquipment.Approved.where(category_id: "#{x}") 
end 
0
 @wanted_equipments = if y 
          WantedEquipment.Approved.where(category_id: "#{x}", sub_category_id: "#{y}") 
          else 
          WantedEquipment.Approved.where(category_id: "#{x}") 
          end if x