我正在使用search logic来过滤公司列表页面上的结果。用户可以使用各种命名URL指定任意数量的参数。例如:
/位置/的墨西哥
/扇区/的技术
/扇区/的金融 /位置/的阿根廷
分别得到以下结果:
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
我不喜欢重复搜索。有什么建议?感谢。
答案 0 :(得分:1)
这就是我写它的方式:
[params[:location], params[:sector]].reject(&:nil?).each do |q|
results = (results ? results : Company).location_permalink_equals q
end
还有很多其他方式,只是一个想法。有一个好处是可以轻松添加说params[:street]
或其他内容。
答案 1 :(得分:1)
我认为在坚持使用SearchLogic时你不能真的干掉那么多...我建议你改进你的路由直接发出*_permalink
作为参数名称并做这样的事情:
Company.all :conditions => params.slice(:location_permalink, :sector_permalink)
或
Company.find :all, :conditions => params.slice(:location_permalink, :sector_permalink)
文档链接:http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Hash/Slice.html