2013-01-20 83 views
0

我建立起來的步驟的活動記錄關聯對象,允許用戶通過品牌和型號的汽車進行過濾的汽車零部件列表的創建:紅寶石:幹出來的活動記錄關聯對象

parts = Part.where(:listed => (start_date..end_date)) 

unless filters[:make_id].nil? || filters[:make_id] == 0  
    parts = parts.joins(:car). 
     where("cars.make_id = ?", filters[:make_id]) 
end 

unless filters[:model_id].nil? || filters[:model_id] == 0  
    parts = parts.joins(:car). 
     where("cars.model_id = ?", filters[:model_id]) 
end 

etc... 

這是重複性的,並且我想把這個抽象成一個將'make_id'和'model_id'作爲參數的方法。保留的一個重要特徵是,如果過濾器爲零(例如,用戶不指定模型),則返回所有模型的零件。

我無法弄清楚如何解決這個問題,我不確定谷歌應該怎麼做。你能幫我嗎?

回答

1
parts = Part.where(:listed => (start_date..end_date)) 

[:make_id, :model_id].each do |k| 
    filters[k] 
    .tap{|f| parts = parts.joins(:car).where("cars.#{k} = ?", f) unless f.to_i.zero?} 
end 
+0

謝謝sawa。你知道這叫做什麼嗎?即我應該搜索什麼? –

+0

@DerekHill你提到哪個部分? – sawa

+0

再想一想就不用擔心了。我想這是遍歷一系列符號並將它們轉換爲需要的字符串的想法。還有我以前沒有遇到的輕拍的使用。只需要讓我的頭在附近。非常感謝您的幫助。 –