Т.е. составить типичные вещи в нем просто, а вот, к примеру, мне нужно сделать отбор по вычисляемому полю, например, цене, которая складывается из цены за юнит умноженной на количество юнитов. Пока ны наю как это сделать.
Вторая неприятность - все передаваемые в запрос значения переменных должны храниться в ЛОКАЛЬНЫХ переменных, а в @переменных это дело работать не будет, а жаль.
А вот и пример моего "дикого запроса".
def index
session[:search]=params[:search] if params[:search] search_params=SearchFilterParams.new(session[:search])
@conditions=Caboose::EZ::Condition.new :lots do
region_id==search_params.region_id if search_params.region_id>0
square<=>(Square.find_by_id(search_params.square.to_s).min_square.to_s .. Square.find_by_id(search_params.square.to_s).max_square.to_s) if search_params.square>0
price_per_square<Price.find_by_id(search_params.price_per_square).max_price.to_s if search_params.price_per_square>0
# full_price<FullPrice.find_by_id(search_params.full_price).max_price.to_s if search_params.full_price>0
distance_to_city<CityDistance.find_by_id(search_params.distance_to_city).max_distance.to_s if search_params.distance_to_city>0
placement_id==search_params.placement if search_params.placement>0
end
## ай-яй-яй, некрасиво
@search=search_params
## должен прийти хеш
## если заданы фильтры
# order by region_id,square, price_per_square*square, distance
sort_init 'price_per_square'
sort_update
@lot_pages, @lots=paginate(:lots,
:include=>['region', 'gas','electricity','water', 'lotroad_distance','departure'],
:order=>sort_clause,
:conditions=>@conditions.to_sql,
:per_page=>3
)
end class SearchFilterParams
attr :region_id
attr :square
attr :price_per_square
attr :full_price
attr :distance_to_city
attr :placement
def initialize(lparams={})
@region_id=lparams[:region_id].to_i
@square=lparams[:square].to_i
@price_per_square=lparams[:price_per_square].to_i
@full_price=lparams[:full_price].to_i
@distance_to_city=lparams[:distance_to_city].to_i
@placement=lparams[:placement].to_i
end
end
Оставить комментарий