用if语句思考sphinx条件

时间:2013-07-27 10:14:53

标签: ruby-on-rails ruby thinking-sphinx

我有或者运营商思考sphinx搜索条件:

Oil.search "(@oiliness #{params[:oiloiliness].gsub(/[^0-9A-Za-z]/, '')} | @oiliness #{params[:oiloiliness]}) | (@description #{params[:descr]}) 

但我必须改变它,我可以使用我的或运算符,但也添加一些if语句条件:例如我的params [:descr]是空的,所以我不需要通过@description搜索(它也会抛出错误)。

我需要像params [:descr]之类的东西然后不使用这部分(@description#{params [:descr]})。但这样做的最佳方式是什么?

使用条件“语法”可能更好更容易:

Oil.search :conditions => {oiliness: "#{params[:oiloiliness].gsub(/[^0-9A-Za-z]/, '')} | #{params[:oiloiliness]}",  params[:descr].present? ? description: "#{params[:descr]" : nil}
像这样......

也:

ThinkingSphinx::Index.define :oil, :with => :active_record do
  indexes :oiliness
  indexes :structure
  indexes :manufacturer
  indexes :capacity
  indexes :description
end

我也试试:

@pre_oils = Oil.search :conditions => {oiliness: "#{params[:oiloiliness].gsub(/[^0-9A-Za-z]/, '')} | #{params[:oiloiliness]}", description: "#{params[:oiloiliness].gsub(/[^0-9A-Za-z]/, '')} | #{params[:oiloiliness]}", capacity: params[:oilsize], manufacturer: params[:oilbrand]}

1 个答案:

答案 0 :(得分:1)

如果你想保持OR逻辑,这样的事情应该可以解决问题:

fields = ["@oiliness #{params[:oiloiliness].gsub(/[^0-9A-Za-z]/, '')} | @oiliness #{params[:oiloiliness]}"]
fields << "@description #{params[:descr]}" if params[:descr].present?

Oil.search(
  fields.collect { |field| "(#{field})" }.join(' | ')
)