I have such thinking sphinx search condition with or operator:
Oil.search "(@oiliness #{params[:oiloiliness].gsub(/[^0-9A-Za-z]/, '')} | @oiliness #{params[:oiloiliness]}) | (@description #{params[:descr]})
but i must change it so, that i can use my or operator, but also add some if statement in condition: for example my params[:descr] is empty, so i didn't need to search via @description (also it will throw error's).
I need something like if params[:descr] then didn't use this part (@description #{params[:descr]}) . But what is the best way of doing this?
Maybe it is better and easier to use conditions "syntax" like:
Oil.search :conditions => {oiliness: "#{params[:oiloiliness].gsub(/[^0-9A-Za-z]/, '')} | #{params[:oiloiliness]}", params[:descr].present? ? description: "#{params[:descr]" : nil}
something like this...
also:
ThinkingSphinx::Index.define :oil, :with => :active_record do
indexes :oiliness
indexes :structure
indexes :manufacturer
indexes :capacity
indexes :description
end
also i try:
@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]}
If you want to keep the OR logic in place, something like this should do the trick:
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(' | ')
)