2010-06-06 65 views
0

我使用search logic來過濾公司列表頁面上的結果。用戶可以使用各種指定的URL指定任意數量的參數。例如:在Rails中乾燥搜索邏輯

/位置/ 墨西哥
/扇區/ 技術
/扇區/ 金融 /位置/ 阿根廷

結果分別如下:

params[:location] == 'mexico' 
params[:sector] == 'technology' 
params[:sector] == 'financial' and params[:location] == 'argentina' 

我現在正在嘗試清理或'幹'我的模型代碼。目前我有:

def self.search(params) 
    ... 
    if params[:location] 
     results = results.location_permalink_equals params[:location] if results 
     results = Company.location_permalink_equals params[:location] unless results 
    end 
    if params[:sector] 
     results = results.location_permalink_equals params[:sector] if results 
     results = Company.location_permalink_equals params[:sector] unless results 
    end 
    ... 
end 

我不喜歡重複搜索。有什麼建議麼?謝謝。


回答

1

這是我會怎麼寫呢:

[params[:location], params[:sector]].reject(&:nil?).each do |q| 
    results = (results ? results : Company).location_permalink_equals q 
end 

還有很多其他的方法,只是一個想法。具有使添加容易的好處params[:street]什麼的。

+1

使用緊湊,而不是拒絕: - 它應該是更快,做同樣的(零?)。你也可以嘗試params.values_at(:location,:sector).compact.each ... – hurikhan77 2010-06-06 09:14:04

+0

好主意。我喜歡'拒絕nil',因爲它立即清楚它做了什麼。 'values_at'很好,特別是如果有更多的參數。 – 2010-06-06 11:06:28