2

我有这样的思考狮身人面像搜索条件或运算符:

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

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

我需要类似 if params[:descr] then didn't use this part (@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]}
4

1 回答 1

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(' | ')
)
于 2013-07-27T13:24:14.927 回答