2010-06-06 55 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