понадобилось добавить еще пару условий для select`а. но так как все условия у меня опциональны, я все пихаю в хеш, и подчищаю его перед тем как скармливаю where`ру. но для условий типа '>=' такой фокус не проходит. гугл мне подсказал о Squeel. но он чето не колется
NoMethodError (undefined method `gteq' for :price:Symbol)
а с другой стороны я посмотрел на код, который уже есть и мне мое програмерское чувство эстетики сказало «you are doing it wrong». поэтому я пришел к вам, боги Р^HЖД и красных камней за мудрыми советами.
прошу извинить меня за стиль изложения, ибо пятница была редкой но меткой.
format.json do
order = [
["rooms", "ASC"],
["apartment_type_id", "ASC"],
["floor_num", "ASC"],
["space", "DESC"],
["created_at", "DESC"],
]
query_params = {
:price => {},
:floor_num => {},
:rooms => params[:rooms],
:district_id => params[:district_id],
:agent_id => params[:agent_id],
:ad_type_id => params[:ad_type_id],
:ad_status_id => params[:ad_status_id],
:realty_type_id => params[:realty_type_id],
}
if params['price-min']
query_params[:price][:price.gteq] = params['price-min']
end
if params['price-max']
query_params[:price][:price.lteq] = params['price-max']
end
if params['floor-min']
query_params[:floor_num][:floor_num.gteq] = params['floor-min']
end
if params['floor-max']
query_params[:floor_num][:floor_num.lteq] = params['floor-max']
end
# FIXME js null here
if query_params[:agent_id].include?('null')
index = query_params[:agent_id].index { |item| item == 'null' }
query_params[:agent_id][index] = nil
end
# fix for empty items
query_params.delete_if { |key, value| value.nil? || value.empty? }
p query_params
render json: Advert
.where(query_params)
.order(order.map {|o| o.join(' ')}.join(', '))
.map { |advert| expand_advert_object(advert) }
end