我有这样的思维斯芬克斯搜索条件与或运算符:
Oil.search "(@oiliness #{params[:oiloiliness].gsub(/[^0-9A-Za-z]/, '')} | @oiliness #{params[:oiloiliness]}) | (@description #{params[:descr]})
但我必须更改它,这样我可以使用or运算符,但也可以在条件中添加一些if语句:例如,我的params[:descr]为空,所以我不需要通过@description进行搜索(它也会抛出error's)。
我需要一些类似的东西,如果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]}
最佳答案
如果您想保持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(' | ')
)